감사합니다! 하나만 더 물어봐도될까요~?
만약 트리거로
insert table t1 -> 지역 * 직종(컬럼) 값
대전, 개발자 | 서울, 미용사
-> table2에 값이 들어오길 원하는 상태
지역 | 직종 (컬럼)
대전 | 개발자
서울 | 미용사
요런 형식으로 값이 들어오길 원하는데 지금 상태는
지역 | 직종
대전 | 서울
개발자 | 미용사
이렇게 값들이 넘어옵니다.
CREATE OR REPLACE TRIGGER tr_test
AFTER INSERT OR UPDATE OR DELETE ON EMP1
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO emp2(ENAME, AGE, PLANT, ROLE, EMAIL)
-- VALUES (:NEW.ENAME, :NEW.AGE, SUBSTR(:NEW.AUTH, 1, INSTR(:NEW.AUTH, '|') -1),
-- SUBSTR(:NEW.AUTH, INSTR(:NEW.AUTH, '|') +1), :NEW.EMAIL);
SELECT :NEW.ENAME
, :NEW.AGE
, REGEXP_SUBSTR(SUBSTR(:NEW.AUTH, 1, INSTR(:NEW.AUTH, '|') -1), '[^,]+', 1, LEVEL) AS PART1
, REGEXP_SUBSTR(SUBSTR(:NEW.AUTH, INSTR(:NEW.AUTH, '|') +1), '[^,]+', 1, LEVEL) AS PART2
, :NEW.EMAIL
FROM DUAL
CONNECT BY LEVEL <= LENGTH (REGEXP_REPLACE(SUBSTR(:NEW.AUTH, 1, INSTR(:NEW.AUTH, '|') -1), '[^,]+')) +1;
그래서 tb1에 인서트할 때
대전, 개발자 | 서울, 미용사 -> 개발자 | 서울 <- 이 부분을 replace 치환 방법으로하려는데 이 방법이 맞을까요 ?
함수 적용 순서가 틀림
- 오류 : REGEXP_SUBSTR(SUBSTR())
- 수정 : SUBSTR(REGEXP_SUBSTR())
CREATE OR REPLACE TRIGGER tr_test AFTER INSERT OR UPDATE OR DELETE ON emp1 FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO emp2(ename, age, plant, role, email) SELECT :NEW.ename , :NEW.age , TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(v, '[^|]+', 1, LEVEL), '[^,]+', 1, 1)) plant , TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(v, '[^|]+', 1, LEVEL), '[^,]+', 1, 2)) role , :NEW.email FROM (SELECT :NEW.auth v FROM dual) CONNECT BY LEVEL <= REGEXP_COUNT(v, '[^|]+') ; -- 중략 -- END; /