Tuesday, November 19, 2013

BULK COLLECT FORALL ROLLBACK

Source


OPEN c_dept_data;
LOOP
FETCH c_dept_data BULK COLLECT INTO vrt_dept_id,vrt_dept_name LIMIT 1000;

FORALL i IN 1 .. vrt_dept_id.COUNT
UPDATE departments_tmp
SET dept_name = vrt_dept_name(i)
WHERE dept_id = vrt_dept_id(i);

EXIT WHEN c_dept_data%NOTFOUND;
END LOOP;
CLOSE c_dept_data;
...


Rollback behavior
If one of the bulk DML statements fails, the individual statement is rolled back and previous DML statements within the FORALL series of statements are not rolled back and the FORALL statement stops executing.
For example if you are using FORALL to insert 100 rows and an error appears on 78th row the execution will stop and rows from 78 to 100 will not be inserted indeed. If you want to overcome this behavior and to insert all rows you can use the SAVE EXCEPTIONS clause.
With the SAVE EXCEPTIONS the cursor attribute SQL%BULK_EXCEPTIONS is used. It is an array that records two elements ERROR_INDEX and ERROR_CODE:

...
v_bulk_errors EXCEPTION;
PRAGMA EXCEPTION_INIT (v_bulk_errors, -24381);

BEGIN -- outer BEGIN

BEGIN –- inner BEGIN clause
OPEN c_dept_data;
LOOP
FETCH c_dept_data BULK COLLECT INTO vrt_dept_id,vrt_dept_name;

FORALL i IN 1 .. vrt_dept_id.COUNT
SAVE EXCEPTIONS
UPDATE departments_tmp
SET dept_name = vrt_dept_name(i)
WHERE dept_id = vrt_dept_id(i);

EXIT WHEN c_dept_data%NOTFOUND;
END LOOP;
CLOSE c_dept_data;

EXCEPTION WHEN bulk_errors THEN
FOR i in 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
Dbms_output.put_line(
'An error '|| i ||' was occured ' ||
SQL%BULK_EXCEPTIONS(i).ERROR_INDEX ||
' during update of dept_id: '||
vrt_dept_id(SQL%BULK_EXCEPTIONS(i).ERROR_INDEX)||
'. Oracle error: ' ||
SQLERRM(-1 * SQL%BULK_EXCEPTIONS(i).ERROR_CODE));
END LOOP;

END; -- end inner BEGIN


In this case the collection variables will be populated on every 1000 rows, after that the FORALL will be executed for them and then will be fetched the next 1000. Be aware of that the previous values for the collection are overwritten.
The other workaround to cope with memory problems coming from large PL/SQL tables is to execute the following supplied stored procedure inside your code:
..
dbms_session.free_unused_user_memory;
..
It will free unused memory for your session after large portions of data was processed. For full details about solving of memory problems with this procedure, see: Procedure DBMS_SESSION.FREE_UNUSED_USER_MEMORY Specification
You can use the SQL%BULK_ROWCOUNT attribute, which is available with the FORALL statement. For each processed row in FORALL there is a corresponding row for this attribute. For example, if you want to know did the n-th processed row from FORALL have affected some rows then you must call SQL%BULK_ROWCOUNT(n). If no rows were affected, the n-th row will be zero.

Wednesday, November 13, 2013

Discrete Label Types and Business Flows

The following table provides a list of the various business flows and the types of labels that you can associate with each flow. The horizontal header row of the table lists the various label types that are available. The far left vertical column lists the warehouse-related business flow. Yes indicates that the system can generate the label type for that business flow. No means that the system does not generate that label type for the business flow.
Discrete Label Types and Business Flows
Bus. FlowMat'lSerialLPNLPN Cont.LPN SumLOCShipShip Cont.WIP Cont.Flow Cont.WIP Move Cont.
ReceiptYesYesYesYesYesNoNoNoNoNo
InspectionYesYesYesYesYesNoNoNoNoNo
DeliverYesYesYesYesYesNoNoNoNoNo
Receiving Put away dropYesYesYesYesYesNoNoNoNoNo
LPN Correction / updateYesNoYesYesYesNoNoNoNoNo
Sales order Cross-DockYesYesYesYesYesNoYesYesNoNo
Replen. dropYesNoYesYesYesNoNoNoNoNo
Cycle countYesNoYesYesYesNoNoNoNoNo
Phys. CountYesNoYesYesYesNoNoNoNoNo
Mat. Stat. UpdateYesYesYesYesYesYesNoNoNoNo
Cost Group UpdateYesNoYesYesYesNoNoNoNoNo
Lot Split / MergeYesYesYesYesNoNoNoNoNoNo
Misc / Alias ReceiptYesNoYesYesYesNoNoNoNoNo
Inter-org XferYesYesYesYesNoNoNoNoNoNo
Sub. XferYesYesYesYesNoNoNoNoNoNo
LPN Gen.NoNoYesNoNoNoNoNoNoNo
Serial Gen.NoYesNoNoNoNoNoNoNoNo
Pick LoadYesNoYesYesYesNoYesYesNoNo
Pick DropYesNoYesYesYesNoYesYesNoNo
Pack / unpack / update LPNYesNoYesYesYesNoNoNoNoNo
Ship Con.YesYesYesYesYesNoYesYesNoNo
Cartonization.YesNoYesYesYesNoYesYesNoNo
Misc. / Alias IssueYesYesYesYesYesNoNoNoNoNo
Dyn. LocNoNoNoNoNoYesNoNoNoNo
Import ASNNoNoYesYesYesNoNoNoNoNo
WIP Comp.YesYesYesYesYesNoNoNoNoNo
Put. Pregen.YesYesYesYesYesNoNoNoNoNo
WIP Pick LoadYesNoYesYesNoNoNoNoYesNo
WIP Pick DropYesNoYesYesNoNoNoNoYesNo
Inv. Put. dropYesYesYesYesYesNoNoNoNoNo
Flow Line StartNoNoNoNoNoNoNoNoNoYes
Flow Line Op.NoNoNoNoNoNoNoNoNoYes
Flow / Work ord. Assem. Comp.YesYesYesYesYesNoNoNoNoNo
Replen. LoadYesNoYesYesYesNoYesYesNoNo
WIP / Flow Put Away DropNoNoNoNoNoNoNoNoNoYes
Pck. WrkbchNoNoYesYesYesNoYesYesNoNo
Manufacturing Cross-DockYesYesNoNoNoNoNoNoYesNo
Pick ReleaseNoNoNoNoNoNoNoYesNoNoNo
Replen. DropNoNoNoYesNoNoNoNoNoNoNo
Flow Line StartNoNoNoNoNoNoNoNoNoYesNo
WIP Move Job TxnNoNoNoNoNoNoNoNoNoNoYes


From the previous tables, the following business flows are also supported in the Mobile Supply Chain Applications (MSCA):
  • Receipt
  • Inspection
  • Delivery
  • Replenishment Drop
  • Cycle Count
  • Physical Count
  • Miscellaneous/Alias Receipt
  • Inter-Org Transfer
  • Subinventory Transfer
  • Serial Generation
  • Pick Load
  • Pick Drop
  • Ship Confirm
  • Miscellaneous/Alias Issue
  • Dynamic Locator
  • WIP Completion
  • Process Dispensing
  • Process Production
  • Process Quality
  • WIP Move Contents

Thursday, November 7, 2013

Oracle Change/Modify PO Print Logo XSL-FO

SOURCE
Changing the Logo on PO Print is a little tricky. I say tricky purely because even though the PO Print program is a XML Publisher based report the layout part of the report is XSL-FO type. So all the details are in XML.

--------------------------------------------------------
Note: For doing this we need to have XML Publisher template builder installed. Pls follow the below instructions

Download the patch from Metalink. Latest version as of today is Patch 12395372: UPDATE FOR BI PUBLISHER DESKTOP 10.1.3.2.1 (5.6.3) size = 95.9 MB Product=BI Publisher (formerly XML Publisher)

Unzip this patch and then run BIPublisherDesktop.exe to install in a directory
--------------------------------------------------------
So lets get to the task.

Step 1: Create an RTF Document and embed the image into the document. I create a MSWord document and 'Save As' RTF document. And in Word (Menu)Insert -> Picture -> From File -> Select the image.

Step 2: Update the size of image to approx the size it appears in the document.

Step 3: Once you have template builder installed, the plug-in adds new menu options in Word. Tools -> Export -> XSL-FO Style Sheet. Screenshot attached



Step 4: An XML file is generated, Open the file and search for tag 'fo:instream-foreign-object' tag which is of our interest.

Step 5: Copy the tag contents from the beginning to the end of the tag 'fo:instream-foreign-object'. So this is our image xdofo:uid 



Step 6: Open XML Publisher, Search for Template 'Standard Purchase Order Stylesheet', Duplicate the template entering required details. Download PO_STANDARD_XSLFO.xsl and rename to XXC_PO_STANDARD_XSLFO.xsl

Step 7: Open XXC_PO_STANDARD_XSLFO.xsl and search for 'fo:inline' which contains the Logo info. Uncomment the inline tags and replace the 'fo:external-graphic content' with the tags contents we copied in step 5.

The file should look like this.




Step 8: Save XXC_PO_STANDARD_XSLFO.xsl and attach the file to the template we created in Step 6. Also update the xsl:style sheet definition(at the beginning of the document) to refer to xdo namespace as follows.

'xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:ora="http://www.oracle.com/XSL/Transform/java/" xmlns:xdofo="http://xmlns.oracle.com/oxp/fo/extensions" xmlns:xdoxliff="urn:oasis:names:tc:xliff:document:1.1" xmlns:xdoxslt="http://www.oracle.com/XSL/Transform/java/oracle.apps.xdo.template.rtf.XSLTFunctions" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"' 

Step 9: Attach the new template to PO Document Types. (Document Type Layout), so the new template will be picked for the PO document creation





Step 10: For this article purpose lets simply the process and see if we can get the PO Document with the new Logo, by using the preview button in XML Publisher(for the new template we created in Step 6).Here we have it.


Tuesday, November 5, 2013

R12.2 Links


Doc ID 1583110.1

http://docs.oracle.com/cd/V39571_01/current/html/docset.html

Tuesday, October 29, 2013

Label Printing WMS

Note: 242789.1 - Oracle Warehouse Management Label Customization 
Note: 298250.1 - Troubleshooting WMS / MSCA Label Printing
Note: 875122.1 - Certified Integration Partners With Oracle WMS/MSCA For Label Printing

Label Printing Strategies for Oracle Warehouse Management System (WMS) (Doc ID 414368.1)

11i - Inventory Label Printing Documentation (Doc ID 277357.1)

Thursday, October 17, 2013

MMT Columns


For Sales Order Pick

TRX_SOURCE_LINE_ID : Sales order line id
SOURCE_LINE_ID : Move order line id

PO receipt

TRX_SOURCE_LINE_ID : NULL
SOURCE_LINE_ID :  rcv transaction id

Tuesday, October 8, 2013

Sales order imp columns

------------------------------------------------------------
OE ORDER HEADERS ALL 
------------------------------------------------------------



order_category_code  

Identify if it's a return

ORDER
RETURN


order_source_id

Identify if its a Normal Sales order or Internal

SELECT *
FROM   OE_ORDER_SOURCES
WHERE  order_source_id

SELECT org_id, order_source_id
FROM   po_system_parameters_all


sales_channel_code

lookup_type = 'SALES_CHANNEL' 

freight_terms_code

lookup_type = 'FREIGHT_TERMS' 
fob_point_code

lookup_type = 'FOB'

payment_term_id

ra_terms

shipping_method_code

wsh_carrier_services

price_list_id

qp_list_headers



------------------------------------------------------------
OE ORDER LINES ALL 
------------------------------------------------------------


item_type_code

lookup_type = 'ITEM_TYPE'


source_type_code 

INTERNAL   : non-dropship orders  
EXTERNAL  : Dropship
---------------------------------------------------------------------

PROGRAMS

---------------------------------------------------------------------

DEMAND INTERFACE PROGRAMS - 
Creates Demand in mtl_demand table.
After Order is booked

SCHEDULE ORDER PROGRAM - 
Creates soft reservation for the sales order

SELECT ooh.order_number
              ,ool.line_id
              ,ool.ordered_quantity
              ,ool.shipped_quantity
              ,ool.invoiced_quantity
              ,wdd.delivery_detail_id
              ,wnd.delivery_id
              ,rctl.interface_line_attribute1
              ,rctl.interface_line_attribute3
              ,rctl.interface_line_attribute6
              ,rct.org_id
              ,rct.creation_date
              ,trx_number
              ,rctl.quantity_ordered
              ,rct.interface_header_context
  FROM oe_order_headers_all ooh
             ,oe_order_lines_all ool
             ,wsh_delivery_details wdd
             ,wsh_new_deliveries wnd
             ,wsh_delivery_assignments wda
             ,ra_customer_trx_all rct
             ,ra_customer_trx_lines_all rctl
 WHERE ooh.header_Id=ool.header_id
      AND wdd.source_header_id=ooh.header_id
      AND wdd.delivery_detail_Id=wda.delivery_detail_id
      AND wda.delivery_id=wnd.delivery_id
      AND rctl.interface_line_attribute1=to_char(ooh.order_number)
      AND rctl.interface_line_attribute6=to_char(ool.line_id)
      AND rctl.interface_line_attribute3=to_char(wnd.delivery_id)
      AND rctl.customer_trx_id=rct.customer_trx_id
      AND rct.interface_header_context='ORDER ENTRY'








Wednesday, October 2, 2013

SQLERRM : ORA-06508 PL/SQL: Could Not Find Program Unit Being Called

SOURCE

When you search this error on the net, you will find out these :
Cause:An attempt was made to call a stored program that could not be found. The program may have been dropped or incompatibly modified, or have compiled with errors.
Action:Check that all referenced programs, including their package bodies, exist and are compatible.
Yes, that’s true. But if you have lots of objects depends to a lot of object :) You will need to more information to fix this error. If you face up with this error, you probably use SQLCODE and SQLERRM in your exception block of your PL/SQL code. Something  like this:
BEGIN
 NULL;
EXCEPTION
 WHEN OTHERS THEN
 ROLLBACK;
 INSERT_LOG(SQLCODE, SQLERRM);
END;
I do not advise to handle errors in this way. Because this error description does not give you enough information abour your error as ORA-06508 error. You don’t really know what triggered this exception. Operation of this code on a production database is also not easy. At this point, Oracle’s DBMS_UTILITY package will be included in out lives. :)
If you write something like this:
BEGIN
 NULL;
EXCEPTION
 WHEN OTHERS THEN
 ROLLBACK;
 INSERT_LOG(SQLCODE,
 DBMS_UTILITY.FORMAT_ERROR_STACK || '@' ||
 DBMS_UTILITY.FORMAT_CALL_STACK);
END;
You will not get ORA-06508 error for the same error. You will get something like this explanation:
ORA-04045: errors during recompilation/revalidation of SIM.PKXXX
ORA-04052: error occurred when looking up remote object TCLCM.PRC_XX@ERP_APPS.WORLD
@----- PL/SQL Call Stack -----
 object      line  object
 handle    number  name
3dc3a9010      1565  package body SIM.PK_XXX
3d9571de8         3  anonymous block

Wednesday, September 4, 2013

FULL OUTER JOIN : Analysis

create table wwt_test_config ( org_id number, item_id number, quantity number);
create table wwt_test_lpn ( org_id number, item_id number, quantity number);

Case 1

insert into wwt_test_config VALUES ( 2434, 1234, 1);
insert into wwt_test_config VALUES ( 2434, 5678, 2);
insert into wwt_test_config VALUES ( 2434, 8761, 6);
insert into wwt_test_config VALUES ( 2434, 4321, 7);



insert into wwt_test_lpn VALUES ( 2434, 1234, 1);
insert into wwt_test_lpn VALUES ( 2434, 5678, 2);
insert into wwt_test_lpn VALUES ( 2434, 8761, 6);
insert into wwt_test_lpn VALUES ( 2434, 4321, 7);
insert into wwt_test_lpn VALUES ( 2434, 9999, 17);


ORG_ID ITEM_ID QUANTITY ORG_ID_1 ITEM_ID_1 QUANTITY_1
2434 1234 1                 2434 1234 1
2434 5678 2                 2434 5678 2
2434 8761 6                 2434 8761 6
2434 4321 7                 2434 4321 7
                                2434 9999 17



Case 2

insert into wwt_test_config VALUES ( 2434, 1234, 1);
insert into wwt_test_config VALUES ( 2434, 5678, 2);
insert into wwt_test_config VALUES ( 2434, 8761, 6);
insert into wwt_test_config VALUES ( 2434, 4321, 7);
insert into wwt_test_config VALUES ( 2434, 9999, 17);


insert into wwt_test_lpn VALUES ( 2434, 1234, 1);
insert into wwt_test_lpn VALUES ( 2434, 5678, 2);
insert into wwt_test_lpn VALUES ( 2434, 8761, 6);
insert into wwt_test_lpn VALUES ( 2434, 4321, 7);


ORG_ID ITEM_ID QUANTITY ORG_ID_1 ITEM_ID_1 QUANTITY_1
2434 1234 1                  2434 1234 1
2434 5678 2                  2434 5678 2
2434 8761 6                  2434 8761 6
2434 4321 7                  2434 4321 7
2434 9999 17



Case 3

insert into wwt_test_config VALUES ( 2434, 1234, 1);
insert into wwt_test_config VALUES ( 2434, 5678, 2);
insert into wwt_test_config VALUES ( 2434, 8761, 6);
insert into wwt_test_config VALUES ( 2434, 4321, 7);
insert into wwt_test_config VALUES ( 2434, 9999, 17);


insert into wwt_test_lpn VALUES ( 2434, 1234, 1);
insert into wwt_test_lpn VALUES ( 2434, 5678, 2);
insert into wwt_test_lpn VALUES ( 2434, 8761, 6);
insert into wwt_test_lpn VALUES ( 2434, 4321, 7);
insert into wwt_test_lpn VALUES ( 2434, 1111, 17);

ORG_ID ITEM_ID QUANTITY ORG_ID_1 ITEM_ID_1 QUANTITY_1
2434 1234 1                 2434 1234 1
2434 5678 2                 2434 5678 2
2434 8761 6                 2434 8761 6
2434 4321 7                 2434 4321 7
                                2434 1111 17
2434 9999 17