To create necessary objects, run the following script:
CREATE OR REPLACE EDITIONABLE TYPE SUPPLIER_RECORD AS OBJECT (
Supplier VARCHAR2(200),
SupplierNumber VARCHAR2(200),
TaxOrganizationTypeCode VARCHAR2(200),
TaxOrganizationType VARCHAR2(200),
SupplierTypeCode VARCHAR2(200),
SupplierStatus VARCHAR2(200),
BusinessRelationshipCode VARCHAR2(200),
BusinessRelationship VARCHAR2(200),
TaxRegistrationCountry VARCHAR2(200),
TaxpayerCountryCode VARCHAR2(200),
TaxpayerCountry VARCHAR2(200),
TaxpayerId VARCHAR2(200)
);
/
CREATE OR REPLACE EDITIONABLE TYPE SUPPLIER_TABLE IS TABLE OF supplier_record;
/
CREATE SEQUENCE SUPPLIERS_SEQ MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT
BY 1 START WITH 6537 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL ;
CREATE TABLE XX_SUPPLIERS
( "ID" NUMBER,
"INSTANCE_ID" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"STATUS" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"SUPPLIER" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"SUPPLIER_NUMBER" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"TAX_ORGANIZATION_TYPE_CODE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"TAX_ORGANIZATION_TYPE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"SUPPLIER_TYPE_CODE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"SUPPLIER_STATUS" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"BUSINESS_RELATIONSHIP_CODE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"BUSINESS_RELATIONSHIP" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"TAX_REGISTRATION_COUNTRY" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"TAXPAYER_COUNTRY_CODE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"TAXPAYER_COUNTRY" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"TAXPAYER_ID" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
"CREATION_DATE" TIMESTAMP (6) DEFAULT SYSDATE,
"UPDATION_DATE" TIMESTAMP (6) DEFAULT SYSDATE
) DEFAULT COLLATION "USING_NLS_COMP" ;
CREATE UNIQUE INDEX XX_SUPPLIERS_PK ON XX_SUPPLIERS ("ID")
;
ALTER TABLE XX_SUPPLIERS ADD CONSTRAINT "XX_SUPPLIERS_PK" PRIMARY KEY ("ID")
USING INDEX XX_SUPPLIERS_PK ENABLE;
CREATE OR REPLACE EDITIONABLE TRIGGER XX_SUPPLIERS_TRIGGER
BEFORE INSERT ON XX_SUPPLIERS
FOR EACH ROW
WHEN (new.ID IS NULL) BEGIN
:new.ID := SUPPLIERS_SEQ.NEXTVAL;
END;
/
ALTER TRIGGER XX_SUPPLIERS_TRIGGER ENABLE;
CREATE OR REPLACE EDITIONABLE TRIGGER XX_SUPPLIERS_UPDATE_DATE BEFORE UPDATE ON
XX_SUPPLIERS
FOR EACH ROW
BEGIN
:NEW.UPDATION_DATE := SYSDATE;
END;
/
ALTER TRIGGER XX_SUPPLIERS_UPDATE_DATE ENABLE;
/
CREATE OR REPLACE EDITIONABLE PACKAGE "ADMIN"."XX_WRAPPER_SUPPLIERS_PKG" AS
PROCEDURE RUN_SCHEDULER_JOB (
P_SUPPLIER_RECORD IN SUPPLIER_TABLE,
P_INSTANCEID IN VARCHAR2
);
PROCEDURE PROCESS_SUPPLIERS (
P_INSTANCEID IN VARCHAR2
);
PROCEDURE GET_SUPPLIERS_PAGINATION_PROC (
I_PAGE IN NUMBER,
I_LIMIT IN NUMBER,
I_PAGE_SIZE OUT NUMBER,
P_DATA OUT SYS_REFCURSOR
);
END XX_WRAPPER_SUPPLIERS_PKG;
/
CREATE OR REPLACE EDITIONABLE PACKAGE BODY "ADMIN"."XX_WRAPPER_SUPPLIERS_PKG" AS
PROCEDURE RUN_SCHEDULER_JOB (
P_SUPPLIER_RECORD IN SUPPLIER_TABLE,
P_INSTANCEID IN VARCHAR2
) IS
L_JOB_ACTION VARCHAR2(1000);
BEGIN
-- DBMS_SESSION.sleep(360);
FOR I IN 1..P_SUPPLIER_RECORD.COUNT LOOP
INSERT INTO XX_SUPPLIERS (
INSTANCE_ID,
STATUS,
SUPPLIER,
SUPPLIER_NUMBER,
TAX_ORGANIZATION_TYPE_CODE,
TAX_ORGANIZATION_TYPE,
SUPPLIER_TYPE_CODE,
SUPPLIER_STATUS,
BUSINESS_RELATIONSHIP_CODE,
BUSINESS_RELATIONSHIP,
TAX_REGISTRATION_COUNTRY,
TAXPAYER_COUNTRY_CODE,
TAXPAYER_COUNTRY,
TAXPAYER_ID
) VALUES ( P_INSTANCEID,
'IN-PROGRESS',
P_SUPPLIER_RECORD(I).SUPPLIER,
P_SUPPLIER_RECORD(I).SUPPLIERNUMBER,
P_SUPPLIER_RECORD(I).TAXORGANIZATIONTYPECODE,
P_SUPPLIER_RECORD(I).TAXORGANIZATIONTYPE,
P_SUPPLIER_RECORD(I).SUPPLIERTYPECODE,
P_SUPPLIER_RECORD(I).SUPPLIERSTATUS,
P_SUPPLIER_RECORD(I).BUSINESSRELATIONSHIPCODE,
P_SUPPLIER_RECORD(I).BUSINESSRELATIONSHIP,
P_SUPPLIER_RECORD(I).TAXREGISTRATIONCOUNTRY,
P_SUPPLIER_RECORD(I).TAXPAYERCOUNTRYCODE,
P_SUPPLIER_RECORD(I).TAXPAYERCOUNTRY,
P_SUPPLIER_RECORD(I).TAXPAYERID );
END LOOP;
L_JOB_ACTION := 'DECLARE
BEGIN
XX_WRAPPER_SUPPLIERS_PKG.PROCESS_SUPPLIERS('''
|| P_INSTANCEID
|| ''');
END;';
DBMS_OUTPUT.PUT_LINE('JOB Action ' || L_JOB_ACTION);
DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'supplier_job', JOB_TYPE => 'PLSQL_BLOCK',
JOB_ACTION => L_JOB_ACTION, START_DATE => SYSTIMESTAMP
, AUTO_DROP => TRUE,
ENABLED => TRUE);
END;
PROCEDURE PROCESS_SUPPLIERS (
P_INSTANCEID IN VARCHAR2
) IS
BEGIN
-- write your logic here, get all data based on Instance Id and do the
validation and mark data as VALID OR INVALID
UPDATE XX_SUPPLIERS
SET
STATUS = 'VALID'
WHERE
INSTANCE_ID = P_INSTANCEID;
END;
PROCEDURE GET_SUPPLIERS_PAGINATION_PROC (
I_PAGE IN NUMBER,
I_LIMIT IN NUMBER,
I_PAGE_SIZE OUT NUMBER,
P_DATA OUT SYS_REFCURSOR
) AS
COUNT1 NUMBER;
BEGIN
SELECT
COUNT(*)
INTO COUNT1
FROM
SUPPLIERS;
I_PAGE_SIZE := CEIL(COUNT1 / I_LIMIT);
OPEN P_DATA FOR SELECT
*
FROM
SUPPLIERS
ORDER BY
ID
OFFSET NVL((I_PAGE - 1), 0) * I_LIMIT ROWS FETCH NEXT I_LIMIT ROWS
ONLY;
END;
END XX_WRAPPER_SUPPLIERS_PKG;
/