커밋 간격을 사용하여 한 테이블에서 다른 테이블로 삽입

아나 스 라페이

한 테이블의 데이터를 다른 테이블에 삽입하는 프로 시저를 작성했습니다. 엄청난 양의 데이터 (총 1 억 6 백만 행)가 있습니다. 따라서 쿼리에 커밋 간격을 지정하고 싶습니다.

정상적으로 작동하고 작업을 완료하는 데 시간이 걸리지 않는이 스크립트를 찾았지만 오류가 발생하는 이유를 모르겠습니다.

INSERT INTO dlc_pr_activity_remise   
VALUES (add all values using ga_array(i).<value in select>)

오류 :

오류 (51,1) : PL / SQL : SQL 문 무시
오류 (51,47) : PL / SQL : ORA-00917 : 쉼표 누락

내 절차 :

create or replace
PROCEDURE ACTIVITY1 AS 
BEGIN
DECLARE 
commit_interval pls_integer := 250000 ; 
uncommitted pls_integer := 0; 
fetch_size  pls_integer := 2500 ; 
cursor g1 is SELECT prr.EVT_DECLENCHEUR ,
                    prr.BQ_CDF ,
                    prr.BQ_DOM ,
                    prr.NUM_COMMERCANT ,
                    prr.TYPE_CONTRAT_COM ,
                    prr.COMMERCANT_SIRET ,
                    prr.TYPE_PRE_COMP ,
                    prr.BQ_CDF_ID_EBF ,
                    prr.BQ_DOM_ID_EBF ,
                    prr.DAT_TRAITEMENT ,
                    prr.EVT_TYPE_OPERATION ,
                    prr.DEV_MT_CRE ,
                    prr.NBR_DECI_MT_CRE ,
                    prr.REF_FICHIER_TRAITE ,
                    prr.NUM_CTC ,
                    prr.REF_FICHIER_ORIGINE ,
                    prr.ORIGINE_FLUX ,
                    prr.NUM_EST_REMISE ,
                    prr.NUM_REMISE_ORIGINE ,
                    prr.NUM_MACHINE ,
                    prr.REF_ARCHIVAGE_REM ,
                    prr.DAT_REMISE ,
                    prr.SUPPORT_REMISE ,
                    prr.DAT_REMISE_CALCULEE ,
                    prr.DAT_VALEUR_REMISE ,
                    prr.COD_APPLI ,
                    to_date(SYSDATE,'DD/MM/YYYY')
                    FROM dlc_pr_remise prr
                    WHERE NOT EXISTS
                      (SELECT *
                      FROM DLC_PR_ACTIVITY_REMISE prao
                      WHERE prao.num_est_remise = prr.num_est_remise
                      );
TYPE GL_T is table of gl%rowtype ; 
gl_array GL_T; 
begin 
open gl ; 
loop 
fetch gl 
bulk collect 
into gl_array 
limit fetch_size ; 
forall i in 1 .. gl_arary.count 
INSERT INTO dlc_pr_activity_remise values(add all values using ga_array(i).<value in select>)
uncommitted :+ uncommitted + sql%rowcount ; 
exit when gl_arary.count < fetch_size ; 
if uncommitted >= commit_interval 
then 
commit ; 
uncommitted := 0; 
end if ; 
end loop ; 
commit ; 
close gl; 
END ;
END ACTIVITY1;

이것을 사용할 수 있습니다. 코드에 오류가 거의 없으므로 컴파일하는 동안 오류가 발생합니다. 아래 코드와 비교하여 실수 한 부분을 찾으십시오. 내 댓글은 인라인입니다.

CREATE OR REPLACE PROCEDURE ACTIVITY1
AS  

   fetch_size  pls_integer := 100 ;

   CURSOR gl
   IS
      SELECT prr.EVT_DECLENCHEUR,
             prr.BQ_CDF,
             prr.BQ_DOM,
             prr.NUM_COMMERCANT,
             prr.TYPE_CONTRAT_COM,
             prr.COMMERCANT_SIRET,
             prr.TYPE_PRE_COMP,
             prr.BQ_CDF_ID_EBF,
             prr.BQ_DOM_ID_EBF,
             prr.DAT_TRAITEMENT,
             prr.EVT_TYPE_OPERATION,
             prr.DEV_MT_CRE,
             prr.NBR_DECI_MT_CRE,
             prr.REF_FICHIER_TRAITE,
             prr.NUM_CTC,
             prr.REF_FICHIER_ORIGINE,
             prr.ORIGINE_FLUX,
             prr.NUM_EST_REMISE,
             prr.NUM_REMISE_ORIGINE,
             prr.NUM_MACHINE,
             prr.REF_ARCHIVAGE_REM,
             prr.DAT_REMISE,
             prr.SUPPORT_REMISE,
             prr.DAT_REMISE_CALCULEE,
             prr.DAT_VALEUR_REMISE,
             prr.COD_APPLI,
             TO_DATE (SYSDATE, 'DD/MM/YYYY')
        FROM dlc_pr_remise prr
       WHERE NOT EXISTS
                (SELECT *
                   FROM DLC_PR_ACTIVITY_REMISE prao
                  WHERE prao.num_est_remise = prr.num_est_remise);

   TYPE GL_T IS TABLE OF gl%ROWTYPE;

   gl_array         GL_T;
BEGIN
   OPEN gl;

   LOOP
      FETCH gl BULK COLLECT INTO gl_array LIMIT fetch_size;

      FORALL i IN 1 .. gl_arary.COUNT
         INSERT INTO dlc_pr_activity_remise -- I assume the dlc_pr_activity_remise table has same columns which you are selectig in cursor.
              VALUES gl_arary (i);

      --Exit the loop when you cursor is empty.
      EXIT WHEN gl%NOTFOUND;

   END LOOP;

   COMMIT;

  CLOSE gl;

END ACTIVITY1;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

한 테이블에서 다른 테이블로 행을 삽입하지만 중복이없는 행만 삽입

분류에서Dev

다른 테이블에서 값을 사용하여 삽입에 대한 쿼리

분류에서Dev

SQLAlchemy ORM을 사용하여 하위 쿼리로 삽입을 수행하는 방법 (한 테이블에서 다른 테이블로 데이터 이동)

분류에서Dev

C #의 다른 매개 변수를 사용하여 mysql의 한 테이블에서 다른 테이블로 값을 삽입하는 방법

분류에서Dev

MySQL : 한 테이블에서 다른 테이블로 값을 삽입하는 방법이 있습니까?

분류에서Dev

MariaDB를 사용하여 루프에서 다른 테이블의 값으로 한 테이블에 행 삽입

분류에서Dev

기본값을 사용하여 한 테이블의 데이터를 다른 테이블에 삽입

분류에서Dev

각 필드를 사용하여 한 테이블의 값을 다른 테이블에 삽입하는 방법

분류에서Dev

한 테이블에서 다른 테이블로 기존 테이블에 특정 열과 데이터 행을 삽입하는 방법은 무엇입니까?

분류에서Dev

PL / SQL을 사용하여 테이블에서 다른 테이블로 데이터 삽입

분류에서Dev

다른 테이블에서 선택한 여러 행 값을 새 테이블에 삽입하는 방법

분류에서Dev

다른 테이블의 한 테이블에 값을 삽입하는 방법

분류에서Dev

선택한 다른 테이블을 기반으로 테이블의 열에 값을 삽입하는 방법

분류에서Dev

한 테이블을 반복하고 그룹별로 다른 테이블에 증분 삽입하는 쿼리

분류에서Dev

php lastInsertId ()를 사용하여 한 테이블의 기본 키를 외래 키로 다른 테이블에 삽입

분류에서Dev

다른 열을 기반으로 한 테이블에서 다른 테이블로 ID 삽입

분류에서Dev

다른 테이블을 삽입하는 동안 한 테이블에서 열 / 행의 Oracle 트리거 변경 값

분류에서Dev

다른 테이블을 입력으로 사용하여 테이블에서 데이터 블록 삭제

분류에서Dev

MySQL에서 세 번째 테이블을 업데이트 할 때 한 테이블의 여러 레코드를 다른 테이블에 삽입하는 방법

분류에서Dev

조건부 선택을 사용하여 다른 테이블에서 테이블에 삽입하는 방법

분류에서Dev

TTL을 사용하여 한 Cassandra 테이블에서 다른 테이블로 데이터 복사

분류에서Dev

트랜잭션 테이블 내용을 삭제하고 insert 문을 사용하여 다시로드하고 삽입이 실행되었는지 확인한 다음 메시지를 커밋하고 인쇄하지 않으면 롤백

분류에서Dev

기존 행을 그대로두고 한 테이블에서 다른 테이블로 데이터 삽입

분류에서Dev

laravel을 사용하여 한 테이블에서 다른 테이블로 복사하는 방법은 무엇입니까?

분류에서Dev

한 테이블 열에서 값을 가져 와서 문자열로 연결하고 다른 테이블에 삽입하는 방법은 무엇입니까?

분류에서Dev

where 절을 사용하여 한 테이블에서 다른 테이블로 데이터 전송 mysql

분류에서Dev

사용자 데이터를 사용하여 한 테이블에서 다른 테이블로 레코드 삽입 ..SQL Server

분류에서Dev

SQL Server 데이터베이스의 제약 조건을 위반하지 않고 한 테이블에서 다른 테이블로 레코드 삽입

분류에서Dev

한 테이블에서 다른 테이블로 레코드를 삽입하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    한 테이블에서 다른 테이블로 행을 삽입하지만 중복이없는 행만 삽입

  2. 2

    다른 테이블에서 값을 사용하여 삽입에 대한 쿼리

  3. 3

    SQLAlchemy ORM을 사용하여 하위 쿼리로 삽입을 수행하는 방법 (한 테이블에서 다른 테이블로 데이터 이동)

  4. 4

    C #의 다른 매개 변수를 사용하여 mysql의 한 테이블에서 다른 테이블로 값을 삽입하는 방법

  5. 5

    MySQL : 한 테이블에서 다른 테이블로 값을 삽입하는 방법이 있습니까?

  6. 6

    MariaDB를 사용하여 루프에서 다른 테이블의 값으로 한 테이블에 행 삽입

  7. 7

    기본값을 사용하여 한 테이블의 데이터를 다른 테이블에 삽입

  8. 8

    각 필드를 사용하여 한 테이블의 값을 다른 테이블에 삽입하는 방법

  9. 9

    한 테이블에서 다른 테이블로 기존 테이블에 특정 열과 데이터 행을 삽입하는 방법은 무엇입니까?

  10. 10

    PL / SQL을 사용하여 테이블에서 다른 테이블로 데이터 삽입

  11. 11

    다른 테이블에서 선택한 여러 행 값을 새 테이블에 삽입하는 방법

  12. 12

    다른 테이블의 한 테이블에 값을 삽입하는 방법

  13. 13

    선택한 다른 테이블을 기반으로 테이블의 열에 값을 삽입하는 방법

  14. 14

    한 테이블을 반복하고 그룹별로 다른 테이블에 증분 삽입하는 쿼리

  15. 15

    php lastInsertId ()를 사용하여 한 테이블의 기본 키를 외래 키로 다른 테이블에 삽입

  16. 16

    다른 열을 기반으로 한 테이블에서 다른 테이블로 ID 삽입

  17. 17

    다른 테이블을 삽입하는 동안 한 테이블에서 열 / 행의 Oracle 트리거 변경 값

  18. 18

    다른 테이블을 입력으로 사용하여 테이블에서 데이터 블록 삭제

  19. 19

    MySQL에서 세 번째 테이블을 업데이트 할 때 한 테이블의 여러 레코드를 다른 테이블에 삽입하는 방법

  20. 20

    조건부 선택을 사용하여 다른 테이블에서 테이블에 삽입하는 방법

  21. 21

    TTL을 사용하여 한 Cassandra 테이블에서 다른 테이블로 데이터 복사

  22. 22

    트랜잭션 테이블 내용을 삭제하고 insert 문을 사용하여 다시로드하고 삽입이 실행되었는지 확인한 다음 메시지를 커밋하고 인쇄하지 않으면 롤백

  23. 23

    기존 행을 그대로두고 한 테이블에서 다른 테이블로 데이터 삽입

  24. 24

    laravel을 사용하여 한 테이블에서 다른 테이블로 복사하는 방법은 무엇입니까?

  25. 25

    한 테이블 열에서 값을 가져 와서 문자열로 연결하고 다른 테이블에 삽입하는 방법은 무엇입니까?

  26. 26

    where 절을 사용하여 한 테이블에서 다른 테이블로 데이터 전송 mysql

  27. 27

    사용자 데이터를 사용하여 한 테이블에서 다른 테이블로 레코드 삽입 ..SQL Server

  28. 28

    SQL Server 데이터베이스의 제약 조건을 위반하지 않고 한 테이블에서 다른 테이블로 레코드 삽입

  29. 29

    한 테이블에서 다른 테이블로 레코드를 삽입하는 방법은 무엇입니까?

뜨겁다태그

보관