쉬운 쿼리문,, 질문있습니다.(update) 0 7 1,802

by 침착맨 [Oracle 기초] update [2022.11.01 15:39:12]


TableA

Column1 Column2

 (null)      (null)

------------------------

 

update tableA

SET Column1 = '(아무값)',

      Column2 = Column1

where 조건~~

이렇게 했을 때 Column2값을 Column1 받은 값을(아무값) substr을 사용하여 가공해서 쓰고 싶은데 

맨 처음 업데이트를 하게되면 그대로 null값을 반환하게 됩니다.

 답변 부탁드리겠습니다 !

by 마농 [2022.11.01 15:51:57]
UPDATE tableA
   SET Column1 = '(아무값)'
     , Column2 = SUBSTR('(아무값)', 1, 2)
 WHERE 조건~~
;

 


by 침착맨 [2022.11.01 15:57:09]

답변 감사합니다 선생님
혹시 SUBSTR('(아무값)', 1, 2)  <- 저기 아무값을 Column1로 대입해서 할 수 있는 방법도 있을까요 ?


by 마농 [2022.11.01 16:02:15]
UPDATE tableA
   SET Column1 = '(아무값)'
 WHERE 조건~~
;
UPDATE tableA
   SET Column2 = SUBSTR(Column1, 1, 2)
 WHERE 조건~~
;

 


by 침착맨 [2022.11.01 17:40:39]

제가 아직 미숙해서 그런데 혹시 이런 식으로도 사용 가능 할까요 ?

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 ''

이 문구가 뜨더라구여 

접근방법이 틀렸을까요 ?

 


by 마농 [2022.11.01 18:01:09]
CREATE OR REPLACE TRIGGER 트리거1
BEFORE UPDATE ON emp7
FOR EACH ROW
BEGIN
    :NEW.Column2 := :NEW.Column1;
END;
/

 


by 침착맨 [2022.11.03 14:34:25]

감사합니다 마농님 ! 혹시 더 궁굼한게 생겨서그런데 !

 

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 이라는 값이 넣어진 상태에서 값들이  가변적으로 계속 바뀔 수 있는 상황에서 해당하는 부분만 바꿀수 있는 방법이 있을까요 ?


by 마농 [2022.11.03 22:14:55]

질문을 정리해서 간결하게 다시 해주세요.

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