Ну прям очень полезный функционал в BD Oracle
В примере показано как можно использовать: - DDL Язык определения данных - DML Язык манипулирования данными
Процедура SR_04_COPY_RECORDS составлена таким образом что бы commit данных происходил каждые 2500 строк.
Такой функционал удобно использовать для больших объёмов данных.
CREATE OR REPLACE PACKAGE PACK_TEST IS PROCEDURE SR_01_DROP_TABLE; PROCEDURE SR_02_CREATE_TABLE; PROCEDURE SR_03_CLEAR_TABLE; PROCEDURE SR_04_COPY_RECORDS; END PACK_TEST; / CREATE OR REPLACE PACKAGE BODY PACK_TEST IS -------------------------Service Request-------------------------------- PROCEDURE SR_01_DROP_TABLE IS BEGIN EXECUTE immediate 'DROP TABLE SIEBEL.CS_SERVICE_REQUEST'; END; PROCEDURE SR_02_CREATE_TABLE IS BEGIN EXECUTE immediate 'CREATE TABLE SIEBEL.CS_SERVICE_REQUEST ( row_id VARCHAR2(15) null )'; END; PROCEDURE SR_03_CLEAR_TABLE IS BEGIN EXECUTE immediate 'TRUNCATE TABLE SIEBEL.CS_SERVICE_REQUEST'; END; PROCEDURE SR_04_COPY_RECORDS IS v_count NUMBER :=1; BEGIN FOR rec IN (SELECT ROWID FROM SIEBEL.S_SRV_REQ ) LOOP INSERT INTO SIEBEL.CS_SERVICE_REQUEST(ROW_ID) SELECT SR.ROW_ID SIEBEL_ROW_ID FROM SIEBEL.S_SRV_REQ SR WHERE SR.ROWID = REC.ROWID; IF v_count >2500 THEN commit ; v_count := 1; ELSE v_count := v_count + 1; END IF; END LOOP; commit; END; END PACK_TEST; /
Для запуска процедур в пакете нужно выполнить следующий скрипт
BEGIN PACK_TEST.SR_01_DROP_TABLE; END; BEGIN PACK_TEST.SR_02_CREATE_TABLE; END; BEGIN PACK_TEST.SR_03_CLEAR_TABLE; END; BEGIN PACK_TEST.SR_04_COPY_RECORDS; END;