프로시져 확인 부탁드립니다. 0 4 738

by 왕보초 [PL/SQL] 프로시져 오라클 [2020.04.16 02:47:13]


프로시져로 시퀀스 이용하여 자동으로 3개 필드에 자동으로 일련번호를 등록 시키는 프로시져를 만들려고 합니다.

한번 확인 부탁드립니다.

CREATE OR REPLACE PROCEDURE ABC.TN_INPUT_EXECEL
AS
    v_mem_name       VARCHAR2(255);
    v_check1_info    VARCHAR2(255);
    v_check2_info    VARCHAR2(255);

BEGIN

    FOR order_list IN  (SELECT * FROM  MASTR_EXECEL2 WHERE 1=1 ) LOOP

        SELECT SQ_REQ_MASTR.NEXTVAL INTO v_mem_name FROM DUAL;
        
        SELECT SQ_ATCHMNFL_GROUP.NEXTVAL INTO v_check1_info FROM DUAL;
        
        SELECT SQ_ATCHMNFL_GROUP.NEXTVAL INTO v_check2_info FROM DUAL;
        
        
        UPDATE MASTR_EXECEL2 SET
           REQ_MASTR_SN        = v_mem_name
          ,ATCHMNFL_GROUP_NO   = v_check1_info
          ,ATCHMNFL_GROUP_NO2  = v_check2_info
        ;
        
        COMMIT;
        
        dbms_output.put_line(' REQ_MASTR_SN ==> ' || v_mem_name);
        dbms_output.put_line(' ATCHMNFL_GROUP_NO ==> ' || v_check1_info);
        dbms_output.put_line(' ATCHMNFL_GROUP_NO2 ==> ' || v_check2_info);

    END LOOP;
    
  EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('오류 발생 : TN_INPUT_EXECEL');
        
END TN_INPUT_EXECEL;

 

by 마농 [2020.04.16 06:25:38]

Update 문에 Where 절이 없네요?
PK, UK, ROWID 등의 유일키 조건을 줘야 합니다.
http://gurubee.net/lecture/1068


by 왕보초 [2020.04.16 09:20:53]

엑셀로 DATA을 우선 밀어넣고 실제 테이블에서 REQ_MASTR_SN PK 입니다.

그리고 프로시져를 돌리면 계속해서 똑같은 값만 들어가요???


by 마농 [2020.04.16 09:23:33]

1. 네. 똑같은 값만 들어가는 오류의 원인을 알려드린 거에요.
 - 원인 : Where 절이 없어서.
 - 해결 : Where 절 추가
2. Where 절 주는 방법은 행을 구별할 수 있는 유일키 조건을 줘야 합니다.
 - PK 로 예정된 항목은 아직 공란이고,
 - UK 로 쓸만한 컬럼이 없다면?
 - ROWID 를 이용하든지.
 - 아니면 참고 URL 의 CURRENT ROW 방법을 이용하든지.
 - 단, 참고 URL 의 방법을 이용하려면 COMMIT 의 위치를 루프 밖으로 빼야 합니다.


by 왕보초 [2020.04.16 10:07:21]

정말 정말 답변 감사합니다. 제가 저의 논리에만 빠져있어서 기본적인 것을 놓쳤네요... 

정말 정말 답변 및 가르침 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입