Below procedure contains XMLDATA as varchar2 how can we execute into clob as the label quantity gets higher pls help.
create or replace PROCEDURE XXACC_LBL_IN_OUT_QUICK
(ErrMsg OUT VARCHAR2
, ErrCode OUT VARCHAR2
, p_label_name IN VARCHAR2
, p_label_size IN VARCHAR2
, p_organization_id IN NUMBER
, p_Delivery IN VARCHAR2
, P_SO_NUMBER IN VARCHAR2
, P_SO_LINE IN VARCHAR2
, P_LOT_NUM IN VARCHAR2
, P_QTY IN NUMBER
, P_CONTAINER_QTY IN NUMBER
, P_COMMENTS IN VARCHAR2
, P_include_address IN VARCHAR2 )
AS
XMLDATA VARCHAR2 (32767);
JOBSTATUS VARCHAR2 (300);
PRINTERSTATUS VARCHAR2 (300);
STATUSTYPE NUMBER;
LINEPOS NUMBER;
LINELEN NUMBER;
L_PRINTER VARCHAR2 (50);
l_copies NUMBER;
l_printer_type VARCHAR2 (50);
l_head1 VARCHAR2 (200);
l_head2 VARCHAR2 (200);
l_head3 VARCHAR2 (200);
l_head4 VARCHAR2 (200);
l_head5 VARCHAR2 (200);
-- Local Variables
l_SHIPPED_QUANTITY NUMBER;
l_order_quantity_uom VARCHAR2(10);
l_ordered_item VARCHAR2(40);
l_container_qty NUMBER;
l_cust_po_number VARCHAR2(50);
l_segment1 VARCHAR2(40);
l_REVISION VARCHAR2(10);
l_description VARCHAR2(100);
l_organization_id NUMBER;
l_customer_name VARCHAR2(50);
CURSOR Line_info(l_so_number VARCHAR2, l_so_line VARCHAR2) IS
SELECT l.SHIPPED_QUANTITY
, l.order_quantity_uom
, REPLACE(l.ordered_item, '&','&'||'amp;') ordered_item
, l.cust_po_number
, REPLACE(msi.segment1, '&','&'||'amp;') segment1
, REV.REVISION
, REPLACE(msi.description, '&','&'||'amp;') description
, msi.organization_id
, REPLACE(c.customer_name, '&','&'||'amp;') customer_name
FROM oe_order_lines_all l
, oe_order_headers_all h
, mtl_system_items msi
, mtl_item_revisions_b rev
, ar_customers c --remediate
WHERE l.header_id = h.header_id
AND l.inventory_item_id = msi.inventory_item_id
AND l.ship_from_org_id = msi.organization_id
AND MSI.INVENTORY_ITEM_ID = REV.INVENTORY_ITEM_ID
AND MSI.ORGANIZATION_ID = REV.ORGANIZATION_ID
AND l.sold_to_org_id = c.customer_id
AND h.order_number = l_so_number
AND l.line_number||'.'||l.shipment_number = l_so_line;
CURSOR Cust_address(l_so_number VARCHAR2, l_so_line VARCHAR2) IS
SELECT arp_addr_label_pkg.format_address(
address_style,
address1, address2, address3, address4,
city, county, state, province, postal_code,
NULL, country, customer_name,NULL,
NULL, NULL, NULL, NULL, NULL, NULL, 'N',
100, 100, 100 ) address
FROM oe_order_lines_all l
, oe_order_headers_all h
, ar_customers c
, HZ_CUST_SITE_USES_ALL s --remediate for r11 to r12
-- , ar_addresses_v A
, hz_cust_acct_sites_all hcas
, hz_party_sites hps
, hz_locations hl
WHERE l.header_id = h.header_id
AND l.sold_to_org_id = c.customer_id
AND l.ship_to_org_id = s.site_use_id
--AND s.CUST_ACCT_SITE_ID = A.address_id
AND s.cust_acct_site_id = hcas.cust_acct_site_id
AND hcas.party_site_id = hps.party_site_id
AND hps.location_id = hl.location_id
AND h.order_number = l_so_number
AND l.line_number || '.' || l.shipment_number = l_so_line;
BEGIN
--l_printer := 'S600_DEV';
--l_copies := 1;
--l_printer_type := 'STRIPE600';
SELECT PRINTER, NUMBER_OF_COPIES
INTO L_PRINTER, l_copies
FROM FND_CONCURRENT_REQUESTS
WHERE REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID;
SELECT printer_type
INTO l_printer_type
FROM fnd_printer
WHERE printer_name = l_printer;
FND_FILE.put_line( FND_FILE.LOG, 'L_PRINTER: ' ||L_PRINTER );
FND_FILE.put_line( FND_FILE.LOG, 'L_COPIES: ' ||L_COPIES );
FND_FILE.put_line( FND_FILE.LOG, 'L_PRINTER_TYPE: ' ||L_PRINTER_TYPE );
FND_FILE.put_line( FND_FILE.LOG, 'L_PRINTER: ' ||L_PRINTER );
FND_FILE.put_line( FND_FILE.LOG, 'p_label_name: ' ||p_label_name );
FND_FILE.put_line( FND_FILE.LOG, 'p_label_size: ' ||p_label_size );
FND_FILE.put_line( FND_FILE.LOG, 'p_organization_id: ' ||p_organization_id );
FND_FILE.put_line( FND_FILE.LOG, 'P_SO_NUMBER: ' ||P_SO_NUMBER );
FND_FILE.put_line( FND_FILE.LOG, 'P_SO_LINE: ' ||P_SO_LINE );
FND_FILE.put_line( FND_FILE.LOG, 'P_LOT_NUM: ' ||P_LOT_NUM );
FND_FILE.put_line( FND_FILE.LOG, 'P_QTY: ' ||P_QTY );
FND_FILE.put_line( FND_FILE.LOG, 'P_CONTAINER_QTY: ' ||P_CONTAINER_QTY );
--
-- Building Shipping Label
--
xmldata := '<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE labels SYSTEM "C:\Program Files\Loftware Labeling\Batch\label.dtd">';
-- xmldata := xmldata || '<labels _FORMAT="' || p_label_name||'_'||l_printer_type||'.lwl';
-- ********************************************************************************************************
xmldata := xmldata || '<labels _FORMAT="' || p_label_name||'_'||p_label_size||'_'||l_printer_type||'.lwl';
FND_FILE.put_line( FND_FILE.LOG, 'FILE: ' || p_label_name||'_'||p_label_size||'_'||l_printer_type||'.lwl' );
-- ********************************************************************************************************
xmldata := xmldata || '" _JOBNAME="' || p_label_name||'_'||l_printer_type;
xmldata := xmldata || '" _PRINTERNAME="' ||l_printer;
xmldata := xmldata || '"><label _QUANTITY="' || l_copies;
xmldata := xmldata || '"><variable name="LOT_NUM">' || p_lot_num;
xmldata := xmldata || '</variable><variable name="COMMENTS">' || p_comments;
FOR C1 IN line_INFO (P_SO_NUMBER, P_SO_LINE)
LOOP
-- FND_FILE.put_line( FND_FILE.LOG, 'C1: ' || C1 );
xmldata := xmldata || '</variable><variable name="QUANTITY_UOM">' || NVL(p_qty, p_container_qty)||' '||c1.order_quantity_uom;
xmldata := xmldata || '</variable><variable name="CUSTOMER_ITEM">' || c1.ordered_item;
xmldata := xmldata || '</variable><variable name="ITEM_DESC">' || c1.description;
xmldata := xmldata || '</variable><variable name="ORDER_LINE">' || p_so_number||'/'||p_so_line;
xmldata := xmldata || '</variable><variable name="CUSTOMER">' || c1.customer_name;
xmldata := xmldata || '</variable><variable name="ITEM">' || c1.segment1||' REV '||c1.revision;
xmldata := xmldata || '</variable><variable name="CUSTOMER_PO">' || c1.cust_po_number;
xmldata := xmldata || '</variable></label>';
IF p_qty IS NOT NULL AND p_container_qty IS NOT NULL AND p_qty>=p_container_qty THEN
l_container_qty := p_qty;
WHILE l_container_qty > 0
LOOP
--FND_FILE.put_line( FND_FILE.LOG, 'i: ' || i );
FND_FILE.put_line( FND_FILE.LOG, 'p_qty: ' || p_qty );
FND_FILE.put_line( FND_FILE.LOG, 'FLOOR(p_qty/p_container_qty): ' || FLOOR(p_qty/p_container_qty) );
FND_FILE.put_line( FND_FILE.LOG, 'p_container_qty: ' || p_container_qty );
xmldata := xmldata || '<label _FORMAT="' || p_label_name||'_'||p_label_size||'_'||l_printer_type||'.lwl';
xmldata := xmldata || '"><variable name="LOT_NUM">' || p_lot_num;
xmldata := xmldata || '</variable><variable name="COMMENTS">' || p_comments;
IF l_container_qty>=p_container_qty THEN
-- l_container_qty := p_container_qty + MOD(p_qty,p_container_qty);
xmldata := xmldata || '</variable><variable name="QUANTITY_UOM">' || p_container_qty||' '||c1.order_quantity_uom;
ELSE
xmldata := xmldata || '</variable><variable name="QUANTITY_UOM">' || l_container_qty||' '||c1.order_quantity_uom;
END IF;
l_container_qty := l_container_qty - p_container_qty;
xmldata := xmldata || '</variable><variable name="CUSTOMER_ITEM">' || c1.ordered_item;
xmldata := xmldata || '</variable><variable name="ITEM_DESC">' || c1.description;
xmldata := xmldata || '</variable><variable name="ORDER_LINE">' || p_so_number||'/'||p_so_line;
xmldata := xmldata || '</variable><variable name="CUSTOMER">' || c1.customer_name;
xmldata := xmldata || '</variable><variable name="ITEM">' || c1.segment1||' REV '||c1.revision;
xmldata := xmldata || '</variable><variable name="CUSTOMER_PO">' || c1.cust_po_number;
xmldata := xmldata || '</variable></label>';
END LOOP;
END IF;
END LOOP;
--
-- Bulid Address Label if requested
--
IF p_include_address = 'Y' THEN
xmldata := xmldata || '<label _FORMAT="' || 'XXACC_CUSTADD_'||p_label_size||'_'||l_printer_type||'.lwl';
FND_FILE.put_line( FND_FILE.LOG, 'FILE: ' || 'XXACC_CUSTADD_'||p_label_size||'_'||l_printer_type||'.lwl' );
xmldata := xmldata || '" _QUANTITY="' || l_copies;
FOR C2 IN Cust_address (P_SO_NUMBER, P_SO_LINE)
LOOP
SELECT SUBSTR(c2.address, 1, INSTR(c2.address, CHR(10), 1, 1))
, DECODE(INSTR(c2.address, CHR(10), 1, 1), 0, NULL, SUBSTR(c2.address, INSTR(c2.address, CHR(10), 1, 1)+1 ,DECODE(INSTR(c2.address, CHR(10), 1, 2), 0, 9999, INSTR(c2.address, CHR(10), 1,2)- INSTR(c2.address, CHR(10), 1, 1) -1 )))
, DECODE(INSTR(c2.address, CHR(10), 1, 2), 0, NULL, SUBSTR(c2.address, INSTR(c2.address, CHR(10), 1, 2)+1 ,DECODE(INSTR(c2.address, CHR(10), 1, 3), 0, 9999, INSTR(c2.address, CHR(10), 1,3)- INSTR(c2.address, CHR(10), 1, 2) -1 )))
, DECODE(INSTR(c2.address, CHR(10), 1, 3), 0, NULL, SUBSTR(c2.address, INSTR(c2.address, CHR(10), 1, 3)+1 ,DECODE(INSTR(c2.address, CHR(10), 1, 4), 0, 9999, INSTR(c2.address, CHR(10), 1,4)- INSTR(c2.address, CHR(10), 1, 3) -1 )))
, DECODE(INSTR(c2.address, CHR(10), 1, 4), 0, NULL, SUBSTR(c2.address, INSTR(c2.address, CHR(10), 1, 4)+1 ,DECODE(INSTR(c2.address, CHR(10), 1, 5), 0, 9999, INSTR(c2.address, CHR(10), 1,5)- INSTR(c2.address, CHR(10), 1, 4) -1 )))
INTO l_head1
, l_head2
, l_head3
, l_head4
, l_head5
FROM DUAL;
END LOOP;
xmldata := xmldata || '"><variable name="HEAD1">' || l_head1;
xmldata := xmldata || '</variable><variable name="HEAD2">' || l_head2;
xmldata := xmldata || '</variable><variable name="HEAD3">' || l_head3;
xmldata := xmldata || '</variable><variable name="HEAD4">' || l_head4;
xmldata := xmldata || '</variable><variable name="HEAD5">' || l_head5;
xmldata := xmldata || '</variable></label>';
END IF;
xmldata := xmldata || '</labels>';
INV_SYNC_PRINT_REQUEST.SYNC_PRINT_REQUEST (XMLDATA, JOBSTATUS, PRINTERSTATUS, STATUSTYPE);
LINEPOS := 0;
fnd_file.put_line (fnd_file.output, 'jobstatus:');
DBMS_OUTPUT.PUT_LINE ('jobstatus:');
WHILE LENGTH (JOBSTATUS) > LINEPOS
LOOP
IF LENGTH (JOBSTATUS) - LINEPOS > 254
THEN
LINELEN := 254;
ELSE
LINELEN := LENGTH (JOBSTATUS) - LINEPOS;
END IF;
DBMS_OUTPUT.PUT_LINE (SUBSTR (JOBSTATUS, LINEPOS, LINELEN));
fnd_file.put_line (fnd_file.output, SUBSTR (JOBSTATUS, LINEPOS, LINELEN));
LINEPOS := LINEPOS + LINELEN;
END LOOP;
DBMS_OUTPUT.PUT_LINE (' ');
fnd_file.put_line (fnd_file.output, ' ');
LINEPOS := 0;
fnd_file.put_line (fnd_file.output, 'printerstatus:');
DBMS_OUTPUT.PUT_LINE ('printerstatus:');
WHILE LENGTH (PRINTERSTATUS) > LINEPOS
LOOP
IF LENGTH (PRINTERSTATUS) - LINEPOS > 254
THEN
LINELEN := 254;
ELSE
LINELEN := LENGTH (PRINTERSTATUS) - LINEPOS;
END IF;
DBMS_OUTPUT.PUT_LINE (SUBSTR (PRINTERSTATUS, LINEPOS, LINELEN));
fnd_file.put_line (fnd_file.output, SUBSTR (PRINTERSTATUS, LINEPOS, LINELEN));
LINEPOS := LINEPOS + LINELEN;
END LOOP;
DBMS_OUTPUT.PUT_LINE (' ');
fnd_file.put_line (fnd_file.output, ' ');
DBMS_OUTPUT.PUT_LINE ('statustype: ' || TO_NUMBER (STATUSTYPE));
fnd_file.put_line (fnd_file.output, 'statustype: ' || TO_NUMBER (STATUSTYPE));
END XXACC_LBL_IN_OUT_QUICK;