Você está na página 1de 5

* Formatted on 9/17/2012 4:52:38 PM (QP5 v5.215.12089.

38647) */
CREATE OR REPLACE PACKAGE BODY CTAR_RA_CUSTOMERS_PKG
AS
FUNCTION get_status (p_customer_id IN NUMBER,
p_table_name IN user_tables.table_name%TYPE)
RETURN VARCHAR2
AS
TYPE rc IS REF CURSOR;
c rc;
l_status VARCHAR2 (1);
BEGIN
OPEN c FOR
'SELECT '
|| ''''
|| 'Y'
|| ''''
|| 'FROM '
|| p_table_name
|| ' WHERE customer_id = '
|| p_customer_id;
FETCH c INTO l_status;
RETURN (l_status);
CLOSE c;
END get_status;
/* FUNCTION get_location (p_customer_number IN NUMBER,
p_attribute6 IN VARCHAR2 (100))
RETURN CHAR
IS
CURSOR loc_decode_c
IS
SELECT DECODE (
p_attribute6,
'N', ctsreports.madcode_comp (p_customer_number),
NVL (p_attribute6,
ctsreports.madcode_comp (p_customer_number)))
FROM DUAL;
BEGIN
OPEN loc_decode_c;
FETCH loc_decode_c INTO v_location;
RETURN (v_location);
CLOSE loc_decode_c;
END get_location;
*/
PROCEDURE p1 (p_ArraySize IN NUMBER)
IS
v_ControlDate SURESH_RA_CUSTOMERS_ALL.last_update_date%TYPE;
v_InsertCount NUMBER := 0;
v_UpdateCount NUMBER := 0;
v_DeleteCount NUMBER := 0;
CURSOR c_inserts
IS
SELECT /* full(s) parallel(s,24) */
s.*
FROM ctsreports.ar_aging_invoices t, SURESH_RA_CUSTOMERS_ALL s
WHERE s.last_update_date > v_ControlDate
AND t.customer_id(+) = s.customer_id
AND t.customer_id IS NULL;
CURSOR c_updates
IS
SELECT /* full(s) parallel(s,24) */
s.*
FROM ctsreports.ar_aging_invoices t, SURESH_RA_CUSTOMERS_ALL s
WHERE s.last_update_date > v_ControlDate
AND t.customer_id = s.customer_id;
TYPE t_repdata IS TABLE OF c_inserts%ROWTYPE;
repdata t_repdata;

CURSOR c_deletes
IS
SELECT customer_id FROM ctsreports.ar_aging_invoices
MINUS
SELECT /* full(s) parallel(s,24) */ customer_id FROM ra_customers_all;
TYPE t_delrow IS TABLE OF c_deletes%ROWTYPE;
v_DeleteRowID t_delrow;
l_location CTSREPORTS.AR_AGING_INVOICES_30DAY.LOCATION%TYPE;
V_AGING_INV_C VARCHAR2 (2);
V_AGING_INV30_C VARCHAR2 (2);
V_AGING_TERMS_C VARCHAR2 (2);
V_AGING_TERMS30_C VARCHAR2 (2);
V_AGING_PMT_C VARCHAR2 (2);
BEGIN
SELECT MAX (last_update_date)
INTO v_ControlDate
FROM ctsreports.ar_aging_invoices;
OPEN c_Inserts;
LOOP
FETCH c_Inserts
BULK COLLECT INTO repdata
LIMIT p_arraysize;
FOR i IN 1 .. repdata.COUNT
LOOP
V_AGING_INV_C :=
get_status (p_customer_id => repdata (i).customer_id,
p_table_name => 'CTSREPORTS.AR_AGING_INVOICES');
V_AGING_INV30_C :=
get_status (
p_customer_id => repdata (i).customer_id,
p_table_name => 'CTSREPORTS.AR_AGING_INVOICES_30DAY');
V_AGING_TERMS_C :=
get_status (p_customer_id => repdata (i).customer_id,
p_table_name => 'CTSREPORTS.AR_AGING_TERMS');
V_AGING_TERMS30_C :=
get_status (
p_customer_id => repdata (i).customer_id,
p_table_name => 'CTSREPORTS.AR_AGING_TERMS_30DAY');
V_AGING_PMT_C :=
get_status (p_customer_id => repdata (i).customer_id,
p_table_name => 'CTSREPORTS.AR_AGING_PMT');
SELECT DECODE (
repdata (i).attribute6,
'N', ctsreports.madcode_comp (
repdata (i).customer_number),
NVL (
repdata (i).attribute6,
ctsreports.madcode_comp (
repdata (i).customer_number)))
INTO l_location
FROM DUAL;
/*
l_location := get_location (p_customer_number => repdata (i).cust
omer_number,
p_attribute6 => repdata (
i).attribute6)
*/
T_AGING_CUSTINFO_INSERTS (
repdata (i).customer_id,
NVL (repdata (i).customer_category_code,
'No Category Assigned'),
NVL (repdata (i).attribute2, 'Unassigned'),
NVL (repdata (i).attribute15, 'Unassigned'),
l_location,
V_AGING_INV_C,
V_AGING_INV30_C,
V_AGING_TERMS_C,
V_AGING_TERMS30_C,
V_AGING_PMT_C);
END LOOP;
COMMIT;
EXIT WHEN c_Inserts%NOTFOUND;
END LOOP;
OPEN c_Updates;
LOOP
FETCH c_Updates
BULK COLLECT INTO repdata
LIMIT p_arraysize;
FOR i IN 1 .. repdata.COUNT
LOOP
BEGIN
SURESH_T_AGING_CUSTINFO (
p_customer_id => repdata (i).customer_id,
p_category => NVL (repdata (i).customer_category_code,
'No Category Assigned'),
p_collector => NVL (repdata (i).attribute2,
'Unassigned'),
p_nae => NVL (repdata (i).attribute15,
'Unassigned'),
p_location => l_location,
p_cust_name => repdata (i).customer_name,
p_cust_nbr => repdata (i).customer_number);
END;
END LOOP;
COMMIT;
EXIT WHEN c_Updates%NOTFOUND;
END LOOP;
IF c_Updates%ISOPEN
THEN
CLOSE c_Updates;
END IF;


OPEN c_deletes;
LOOP
FETCH c_deletes
BULK COLLECT INTO v_DeleteRowID
LIMIT p_ArraySize;
FOR i IN 1 .. v_DeleteRowID.COUNT
LOOP
DELETE FROM ctsreports.ar_aging_invoices
WHERE customer_id = v_DeleteRowID (i).customer_id;
DELETE ctsreports.ar_aging_invoices_30day
WHERE customer_id = v_DeleteRowID (i).customer_id;
-- DELETE ctsreports.ar_inv_count
-- WHERE customer_id = v_DeleteRowID (i).customer_id;
--
-- DELETE ctsreports.ar_terms_count
-- WHERE customer_id = v_DeleteRowID(i).customer_id;
DELETE ctsreports.ar_aging_terms
WHERE customer_id = v_DeleteRowID (i).customer_id;
DELETE ctsreports.ar_aging_terms_30day
WHERE customer_id = v_DeleteRowID (i).customer_id;
-- DELETE ctsreports.ar_aging_payments
-- WHERE customer_id = v_DeleteRowID (i).customer_id;
DELETE ctsreports.ar_aging_pmt
WHERE customer_id = v_DeleteRowID (i).customer_id;
-- DELETE ctsreports.ar_aging_baldue
-- WHERE customer_id = v_DeleteRowID (i).customer_id;
--
-- DELETE ctsreports.ar_aging_billsic
-- WHERE customer_id = v_DeleteRowID (i).customer_id;
--
-- DELETE ctsreports.ar_aging_billsic_terms
-- WHERE customer_id = v_DeleteRowID (i).customer_id;
--
-- DELETE ctsreports.ar_aging_original_inv
-- WHERE customer_id = v_DeleteRowID (i).customer_id;
END LOOP;
COMMIT;
EXIT WHEN c_deletes%NOTFOUND;
END LOOP;
-- END IF;
IF c_deletes%ISOPEN
THEN
CLOSE c_deletes;
END IF;

END p1;
END CTAR_RA_CUSTOMERS_PKG;

Você também pode gostar