안녕하세요 .
조건에 맞게 자동으로 insert를 하고싶습니다.(trigger)
table : staff
직번 | 이름 | 직급 | 성별 | 생년월일 | 진급일자 |
123456 | 홍길동 | 사원 | 남 | 880888 | |
123777 | 홍길동 | 주임 | 남 | 880888 | 20190101 |
789123 | 이순신 | 주임 | 남 | 770777 | |
789777 | 이순신 | 대리 | 남 | 770777 | 20190201 |
777987 | 김유신 | 과장 | 남 | 660666 | |
999123 | 박차장 | 차장 | 남 | 550555 | 20170101 |
888321 | 안중근 | 부장 | 남 | 660621 | |
888123 | 안중근 | 전무 | 남 | 660621 | 20190501 |
이런 테이블이 있다면...
조건 : staff에 진급일자가 201901이상이고 , 직번,생년월일이 두개인것이 insert나 select 될때마다 staff2에 insert
테이블 : staff2
진급일자 | 구분번호 | 이름 | 생년월일 |
20190101 | 123777 | 홍길동 | 880888 |
20190201 | 789777 | 이순신 | 770777 |
20190501 | 888123 | 안중근 | 660621 |
감사합니다.
INSERT ALL WHEN 1=1 THEN INTO staff(직번, 이름, 직급, 성별, 생년월일, 진급일자) VALUES (직번, 이름, 직급, 성별, 생년월일, 진급일자) WHEN gb = 1 THEN INTO staff2(진급일자, 구분번호, 이름, 생년월일) VALUES (진급일자, 직번 , 이름, 생년월일) SELECT a.직번 , a.이름 , a.직급 , a.성별 , a.생년월일 , a.진급일자 , NVL2(b.이름, 1, 0) gb FROM (-- 신규 입력 대상 값 -- SELECT '123777' 직번 , '홍길동' 이름 , '주임' 직급 , '남' 성별 , '880888' 생년월일 , '20190101' 진급일자 FROM dual ) a LEFT OUTER JOIN staff b ON a.이름 = b.이름 AND a.생년월일 = b.생년월일 AND a.진급일자 >= '20190101' WHERE ROWNUM = 1 ;
행단위 트리거에서는 해당 테이블을 참조할 수 없습니다. (뮤테이팅에러 발생)
에러 해결방법은 문장단위와 행단위를 넘나들며 동작하는 복합 트리거를 작성하셔야 합니다.
뮤테이팅 에러 해결방법 찾아보세요.
http://gurubee.net/article/54396
http://gurubee.net/article/61280
http://gurubee.net/article/53504
꼭 실시간으로 반영되어야 하는 것인지? 배치작업 형태로 작업 해도 되는지?
답변감사합니다..!
create or replace trigger emp_no
after insert or update on staff
--for each row
--declare
begin insert into staff2 (진급일자,구분번호,이름,생년월일)
select 직번,
이름,
직급,
성별,
생년월일,
진급일자
from staff2
where 생년월일 in(select 생년월일
from staff
group by 생년월일
having count(*) >1)
and 진급일자 >= 201901
order by 생년월일,진급일자;
end;
이렇게 트리거를 생성해보았는데 선생님 말씀처럼 안되네요...ㅠ
키값을 입력안해서 그런지... staff에 insert가 될때마다 계속 중복허용되면서 staff2에 insert가 되네요....
감사합니다..!
create or replace trigger emp_no
after insert or update on staff
for each row
when(new.진급일자>=201901 and ) --이부분에
/* -- (select 생년월일
from staff
group by 생년월일
having count(*) >1)
*/ --- 추가 할려면 when절에 바로 넣을수가 없나요...?
begin
insert into staff2 (진급일자,직번,주민등록번호,이름,성별,직급)
values(:new.진급일자,:new.직번, :new.주민등록번호,:new.이름,:new.성별,:new.직급);
end;
when 절에 위와같은 조건을 추가하면 뮤테이팅 에러가 발생하나요?ㅠ