트리거 실행시 ORA-01403 에러 0 3 11,105

by 짱짱 [PL/SQL] [2010.08.30 14:07:09]


안녕하세요.
혼자서 해보려고 했는데, 잘 안돼서 도움 요청합니다.

T_MEMBERS 테이블에 insert하기 전에, A 유저가 가지고 있는 member 테이블을 조회해서, 데이터가 있으면 id를 가져와서 값을 대체 하고, 존재하지 않으면 요청된 값으로 insert를 진행하게 하려고합니다.

기존 데이터가 있으면 문제가 없는데, 조회결과과 없을경우엔 select 문에서 ORA-01403에러가 나네요.
이거저거 해보다가 방법을 못찾고 글올립니다.
좋은하루되세요....


CREATE OR REPLACE TRIGGER "MEMBERS_INSERT" BEFORE INSERT ON T_MEMBERS
FOR EACH ROW
DECLARE
  vMemid VARCHAR2(20);

BEGIN
  
   SELECT ID into vMemid
  FROM A.T_MEMBERS
  WHERE perid = :new.perid;


  if vMemid is not null then
  :new.memid := vMemid;
  end if;

END;

by 知音 [2010.08.30 14:22:44]
if SQL%NOTFOUND then
........
else
:new.memid := vMemid;
end if

by 마농 [2010.08.30 14:24:21]
1. 에러를 잡는 방법 : 서브블럭을 이용한 Exception 처리
BEGIN

BEGIN
SELECT id INTO vMemid FROM a.t_members WHERE perid = :new.perid;
EXCEPTION
WHEN NO_DATA_FOUND THEN
Null;
END;

END;


2, 에러를 피하는 방법 : 그룹함수를 이용한 무조건 1행 반환)
BEGIN
SELECT MAX(id) INTO vMemid FROM a.t_members WHERE perid = :new.perid;
END;

by 짱짱 [2010.08.30 16:20:48]
知音님, 마농님
감사합니다... (__)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입