TableA
Column1 Column2
(null) (null)
------------------------
update tableA
SET Column1 = '(아무값)',
Column2 = Column1
where 조건~~
이렇게 했을 때 Column2값을 Column1 받은 값을(아무값) substr을 사용하여 가공해서 쓰고 싶은데
맨 처음 업데이트를 하게되면 그대로 null값을 반환하게 됩니다.
답변 부탁드리겠습니다 !
UPDATE tableA
SET Column1 = '(아무값)'
, Column2 = SUBSTR('(아무값)', 1, 2)
WHERE 조건~~
;
답변 감사합니다 선생님
혹시 SUBSTR('(아무값)', 1, 2) <- 저기 아무값을 Column1로 대입해서 할 수 있는 방법도 있을까요 ?
UPDATE tableA SET Column1 = '(아무값)' WHERE 조건~~ ; UPDATE tableA SET Column2 = SUBSTR(Column1, 1, 2) WHERE 조건~~ ;
제가 아직 미숙해서 그런데 혹시 이런 식으로도 사용 가능 할까요 ?
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 ''
이 문구가 뜨더라구여
접근방법이 틀렸을까요 ?
CREATE OR REPLACE TRIGGER 트리거1
BEFORE UPDATE ON emp7
FOR EACH ROW
BEGIN
:NEW.Column2 := :NEW.Column1;
END;
/
감사합니다 마농님 ! 혹시 더 궁굼한게 생겨서그런데 !
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 이라는 값이 넣어진 상태에서 값들이 가변적으로 계속 바뀔 수 있는 상황에서 해당하는 부분만 바꿀수 있는 방법이 있을까요 ?
질문을 정리해서 간결하게 다시 해주세요.