A 테이블의 컬럼이 5개라고 했을 떄
구분자를 2개 이상 사용하여
B 테이블에 자동 등록되게끔 만들어 보려고하는데
B테이블은 컬럼이 6개로 만들어서 등록되게끔 만들수 있을까요 ,,??
ex) a테이블
이름 / 나이 / 지역*직종 / 이메일 등등..
b테이블
이름 / 나이 / 지역 / 직종 / 이메일 등..
이런식으로 가능할까요 ?
CREATE OR REPLACE TRIGGER tr_test
AFTER INSERT
ON t1
FOR EACH ROW
BEGIN
INSERT INTO t2 (이름, 나이, 지역, 직종, 이메일)
VALUES( :NEW.이름
, :NEW.나이
, SUBSTR(:NEW.지역*직종, 1, INSTR(:NEW.지역*직종, '*') - 1)
, SUBSTR(:NEW.지역*직종, INSTR(:NEW.지역*직종, '*') + 1)
, :NEW.이메일
) ;
END;
/
감사합니다! 하나만 더 물어봐도될까요~?
만약 트리거로
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;
/