2012-12-17 2 views
0

PLSQL에서 문제가 발생하여 도움을 얻을 수 있기를 바랍니다. 나는 2 개의 테이블을 가지고있다 - 첫 번째 테이블은 test1이고 customer_id와 msisdn의 2 개의 컬럼을 가지고 있고 그 안에 2 개의 레코드를 가지고있다. 다른 하나는 test_hist라고하며 customer_id, msisdn 및 seqno의 3 개의 열과 1 개의 레코드가 있습니다. "seqno"는 sequnce 번호입니다. 의 모든 기록은 높은 1. 내가 쓴 스크립트가있는 SEQNO 번호 얻을 inseted :스크립트 내 삽입

DECLARE

CURSOR test IS 
SELECT * FROM test1; 


CUSTOMER_ID NUMBER; 
MSISDN NUMBER; 
V_SEQNO NUMBER; 

FOR a IN test LOOP 

     SELECT MAX(SEQNO)+1 INTO V_SEQNO FROM test1_hist; 

     INSERT INTO test1_hist 
     select a.CUSTOMER_ID ,v_seqno, a.msisdn 
     from test1; 
    END LOOP; 
    commit; 

END를 BEGIN을;

CUSTOMER_ID SEQNO MSISDN 

1.55443322 3 5422112 
1.55443322 3 5422112 
1.12232323 2 5454554 
1.12232323 2 5454554 
1.22211444 1 544643330 

은 레코드 수와 같은 시간을 실행 :

문제는 그것을 실행 한 후,이 내가 test_hist 테이블에 무엇을 얻을 것을입니다. test1 테이블에 4 개의 레코드가 있다면 test_hist 16 (각각 4 개)에 삽입됩니다. 원래 테이블의 메신저 작업 가 400K 기록을 가지고, 그래서 난 그냥 캔트 몇 가지 간단한 삽입 문을 .... (: 메신저 두꺼비를 사용하여 environement은 ORACLE 8

내가 놓친 거지 어떤 생각입니다

?

정말 고마워 아사 프.

+0

어떤 언어 및 환경입니까? SQL과 비슷하지만 더 정확하게 표현할 수 있습니까? – arkascha

+0

오라클 8의 PLSQL. – Shlomix

+0

정보를 추가해 주셔서 감사합니다. 죄송합니다. 경험이 없습니다. – arkascha

답변

0

당신이 간단한 삽입에서 수행 할 것을 data..can를 삽입하는 PL/SQL 블록이 필요 ... 다른 현명한 이용 PL/SQL이없는 ..then 순서를 사용할 수 있습니다 이중 또는 값

선언문

커서 테스트 IS SELECT * FROM test1;

CUSTOMER_ID NUMBER; 
MSISDN NUMBER; 
V_SEQNO NUMBER; 
BEGIN 

    FOR a IN test LOOP 

     SELECT MAX(SEQNO)+1 INTO V_SEQNO FROM test1_hist; 

     INSERT INTO test1_hist 
     select a.CUSTOMER_ID ,v_seqno, a.msisdn 
     from dual; 
    END LOOP; 
    commit; 
+0

고마워요! 그것의 모든 좋은 지금! – Shlomix

+0

사실,이 예제에서 특히 듀얼 작업을 수행하는 방법을 이해하려고 노력 중입니다. – Shlomix

+0

안녕 Shlomix, test1 테이블에서와 같이 많은 시간 동안 각 값을 테이블 test1_hist에 삽입하려고하면 문제가 발생했습니다. 실행하십시오 과 같은 검색어는 test1의 ''을 선택합니다. 이렇게하면 ''이 test1의 열 수만큼 반환됩니다. 하지만 이중면 ... 행만 반환됩니다. 예 : 이 쿼리는 select * from dual; 이것은 단지 하나의 행을 반환 할 것입니다 ... thats in/pls/루프 루프에/SQL과 개별 값을 넣으려면 values ​​() 절에 삽입을 사용하거나 삽입 이중에서 값을 선택해야합니다; – GKV