오라클 update 시 동일한 테이블의 값 참조 .. 0 3 4,260

by 임여사 [SQL Query] [2016.02.25 11:40:33]


update T_USR A
SET A.BEFORE_NM = (SELECT AFTER_NM FROM T_USR B WHERE B.T_NO=FN_GET_BF_NO(A.T_NO)) 
where USE_YN = 'Y'

 

이전 T_NO를 가져오는 FN_GET_BF_NO 함수 를 이용 해서 

동일 테이블을 sub query 로 값을 가져오는 일을 하고 싶은데.. 

알수없는 오류들로 실행이 안됩니다 ㅜㅜ

 

검색으로  join 형태로 하면 된다기에 해봤지만 또 안되네요 ㅠㅠ

안의 select 문은 실행 되구요 ㅜㅜ


update (
select A.BEFORE_NM ,  B.AFTER_NM 
FROM T_USR A left JOIN 
T_USR B
on FN_GET_BF_NO (A.T_NO)= B.T_NO
where A.USE_YN = 'Y'
)
set A.BEFORE_NM = B.AFTER_NM

 

 

 

부탁드립니다 ㅜㅜ 쿼리로 못하면 수기로 해야되요 흑......

by swlee710 [2016.02.25 11:54:20]
UPDATE T_USR A
  SET A.BEFORE_NM = (SELECT B.AFTER_NM
                     FROM T_USR B
                     WHERE B.T_NO=FN_GET_BF_NO(A.T_NO)
                       AND A.USER_YN = 'Y')
  WHERE EXISTS (SELECT 'A'
                  FROM T_USR B
                   WHERE B.T_NO=FN_GET_BF_NO(A.T_NO)
                   AND A.USER_YN = 'Y')

 


by 임여사 [2016.02.25 12:18:46]

답변감사합니다 헌데 오류가 납니다 ㅜㅜ 제가 사용하는 함수에 문제가 있는건지 ㅜㅜ 

SQL 오류: ORA-04091: table T_USR is mutating, trigger/function may not see it
ORA-06512: at ".FN_GET_BF_NO", line 14
04091. 00000 -  "table %s.%s is mutating, trigger/function may not see it"
*Cause:    A trigger (or a user defined plsql function that is referenced in
           this statement) attempted to look at (or modify) a table that was
           in the middle of being modified by the statement which fired it.
*Action:   Rewrite the trigger (or function) so it does not read that table.

 

 

 

 


by 마농 [2016.02.25 12:51:09]

트리거나 펑션에서는 업데이트 중인 테이블을 참조할 수 없다는 거네요.

펑션 안의 내용을 확인하셔서 쿼리로 풀어내셔야 할 듯.

펑션 안의 내용을 보여주세요.

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