제가 아직 미숙해서 그런데 혹시 이런 식으로도 사용 가능 할까요 ?
UPDATE tableA
SET Column1 = '(아무값)'
WHERE 조건~~
;
CREATE OR REPLACE TRIGGER 트리거1
AFTER UPDATE ON EMP7
FOR EACH ROW
BEGIN
IF UPDATING THEN
UPDATE TableA
Set Column2 = :NEW.Column1
Where 조건~~
END IF;
END;
로 해보려 했으나
트리거는 컴파일 되었지만
ORA-04091: is mutating, trigger/function may not see it
ORA-06512: at "", line 3
ORA-04088: error during execution of trigger ''
이 문구가 뜨더라구여
접근방법이 틀렸을까요 ?
감사합니다 마농님 ! 혹시 더 궁굼한게 생겨서그런데 !
UPDATE 테이블
SET 역할 = '지역,1,A', <- (A or D로 구분)
중첩역할 = CASE WHEN 역할보조 IS NULL THEN REGEXP_SUBSTR('지역,1,A', '[^,]+', 1,1) || ',' || REGEXP_SUBSTR('지역,1,A,'[^,]+' ,1,2)
WHEN 중첩역할 IS NOT NULL THEN
CASE WHEN '지역,2,D' NOT LIKE '%,D%' THEN REGEXP_SUBSTR('지역,2,D', '[^,]+', 1,1) || ',' || REGEXP_SUBSTR('지역,2,D','[^,]+' ,1,2) || '|' || 중첩역할 <-- ex) 지역,1|지역,2
WHEN '지역,2,D' LIKE '%,D%' THEN REGEXP_SUBSTR(중첩역할 , '[^|]+', 1,1) <-- 지역1
END
END
WHERE 회원이름 = '홍길동';
이런 쿼리문을 짜서
역할이라는 컬럼에 값이 지역,1,A
중첩역할 컬럼에는 값이 지역,1
다시 역할이라는 컬럼에 지역,2,A라는 값을 업데이트하면
중첩역할 컬럼에는 값이 지역,1|지역,2 값으로 업데이트하게 짰습니다.
이 부분을 프로시저로
CREATE OR REPLACE PROCEDURE 프로시저명~
(
P_회원이름 IN 테이블.회원이름%TYPE,
P_역할 테이블.역할%TYPE,
P_중첩역할 테이블.역할보조%TYPE
)
IS
BEGIN
UPDATE EMP7 SET 역할= P_역할,
중첩역할 = CASE WHEN 중첩역할 IS NULL THEN REGEXP_SUBSTR( P_중첩역할 , '[^,]+', 1,1) || ',' || REGEXP_SUBSTR( P_중첩역할 ,'[^,]+' ,1,2)
WHEN ACCU_AUTH IS NOT NULL THEN
CASE WHEN P_중첩역할 NOT LIKE '%,D%' THEN ACCU_AUTH || '|' || REGEXP_SUBSTR( P_중첩역할 , '[^,]+', 1,1) || ',' || REGEXP_SUBSTR( P_중첩역할 ,'[^,]+' ,1,2)
WHEN P_중첩역할 LIKE '%,D%' THEN ACCU_AUTH = 쏼라쏼라~~~
END
END
WHERE 회원이름= P_회원이름;
END 프로시저명;
여기서 궁금한게 혹시 값이 여러개 중첩되어 지역,1|지역,2|지역,3 이라는 값이 넣어진 상태에서 값들이 가변적으로 계속 바뀔 수 있는 상황에서 해당하는 부분만 바꿀수 있는 방법이 있을까요 ?