Зміст

Создание и использование пакетов Oracle

Создание пакета

Ну прям очень полезный функционал в 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;