해결하였습니다. 0 0 1,090

by 강영수 [2008.12.25 15:51:41]


우선 댓글로 방법을 알려주신 분께 진심으로 감사드립니다.

아래의 구문으로 처리 했습니다.

사실 위의 글에서 답을 주신 분 말씀대로 cousor로 할려고 했었지만, 실제 데이터는 오직 결과가 하나여서

이렇게 처리를 했습니다. AFTER를 BEFORE로 변경 했으며,

 

CREATE OR REPLACE TRIGGER EDICERTIF_MAIN_INS
BEFORE INSERT ON GETP.EDI_CERTIF_MAIN
FOR EACH ROW

---------------------------------------------------------------------------------------------------
-- Trigger Name : EDI_CERTIF_MAIN_INS
-- Description  : 전자문서 수신 시 해당 테이블에 COMPANY_ID 컬럼을 채워줌.
-- Table        : EDI_CERTIF_MAIN
-- Event        : INSERT
---------------------------------------------------------------------------------------------------
BEGIN
    SELECT COMPANY.COMPANY_ID
    INTO :NEW.COMPANY_ID
    FROM GETP.COMMON_COMPANY COMPANY, GETP.COMPANY_PARTNER PARTY
    WHERE COMPANY.COMPANY_ID = PARTY.COMPANY_ID
        AND COMPANY.EDI_CLASS_ID2 = :NEW.DOCUMENT_RECIPIENT_ID
        AND PARTY.EDI_CLASS_ID = :NEW.DOCUMENT_SENDER_ID
    GROUP BY COMPANY.COMPANY_ID;
END EDICERTIF_MAIN_INS;
/

로 변경하여  " END EDICERTIF_MAIN_INS; " 가 최종적으로 :NEW.COMPANY_ID를 수정하게 변경했습니다.

이는 :NEW의 유용한 특징 중 하나라고 나와있네요. 

statement가 실제로 실행될 때, :NEW에 있는 어떤 값이든 사용 될 것이다라고..

따라서 EDI CERTIF_MAIN_INS를 이용하여 INSERT문을 에러를 발생시키지 않고 발생할 수있다.

 

참고서적 : 강력한 PL/SQL 프로그램 개발을 위한 ORACLE9i PL/SQL Programmin (정보문화사), 516페이지 中

 

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