PL / SQL 트리거 기초 및 예
4856 단어 Oacle 데이터베이스트리거PL / SQL 프로 그래 밍
트리거 소개;
트리거 의 정 의 는 어떤 조건 이 성립 될 때 트리거 에 정 의 된 문 구 는 자동 으로 실행 된다 는 것 이다.따라서 트리거 는 인위적인 호출 이 필요 없고 호출 이 불가능 하 다.트리거 와 프로 세 스 함수 유사 프로 세 스 함수 가 호출 되 어야 합 니 다.
12 , ,
: , :
before: ;
after: 。
: :
insert: ;
update: ;
delete: 。
: 。
for each row: 。 , 。
트리거 생 성 문법:
트리거 emp 표 에 추 가 된 데 이 터 를 emp 에 추가 합 니 다.bak 중
1) scott 사용자 의 emp 표 구 조 를 복사 합 니 다.
create table emp_bak as select * from emp where 1=2;
2) emp 표 에 데 이 터 를 삽입 합 니 다.
-- emp
insert into emp values(1234,'wangerxiao','SALESMAN',7902,to_date('1990-1-1','yyyy-mm-dd'),1000,100,20);
3) emp 표를 만 들 고 추 가 된 트리거 를 삭제 합 니 다.
create or replace trigger tr_emp --
before delete --
on emp_bak -- emp_bak
for each row --
begin
--:old :new
insert into emp_copy values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno);
end;
4), 추 가 된 데이터 삭제
SQL> delete from emp_bak where empno=1234;
1 row deleted
5), 검색 empbak 시계
데이터 가 emp 에 추가 되 었 습 니 다.bak 시계 맞았어 요.
SQL> select * from emp_bak;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
1234 wangerxiao SALESMAN 7902 1990/1/1 1000.00 100.00 20
6), 트리거 삭제
drop trigger tr_emp;
상술 한 예 를 완성 하면, 우 리 는 이미 기본 적 인 트리거 를 만 들 것 이다
2. 트리거 를 사용 하여 사용자 emp 의 표 조작 을 제한 합 니 다 (비 근무 시간 에 데이터 만 조회 할 수 있 습 니 다)
-- emp 표 수정 (INSERT, DELETE, UPDATE 포함) 에 대한 시간 범 위 를 제한한다. 즉, 비 근무 시간 (주말, 8: 30 이전 17: 30 이후) 에 emp 표를 수정 하 는 것 을 허용 하지 않 는 다.
트리거 생 성
create or replace trigger tr_emps
before delete or update or insert
on emp
for each row
begin
if (to_char(sysdate,'DAY') in (' ',' ') or
to_char(sysdate,'HH24:MI') not between '08:30' and '22:00' ) then
raise_application_error(-20001,' ');
end if;
end;
트리거 제한 을 사용 할 때 사용자 가 입력 한 것 이 잘못 되 었 을 수 있 으 므 로 이상 을 정의 해 야 합 니 다.
raise_application_error(-20001,' ');
8 시 30 분부 터 22 시 까지 삭제, 업데이트, 추가 가능
SQL> update emp set sal=1000 where ename='SMITH';
1 row updated
정 해진 시간 내 에 데 이 터 를 업데이트 하지 않 습 니 다.
SQL> update emp set sal=1000 where ename='SMITH';
update emp set sal=1000 where ename='SMITH'
ORA-20001:
ORA-06512: "SCOTT.TR_EMPS", line 7
ORA-04088: 'SCOTT.TR_EMPS'
트리거 한정 조작
-- 부서 번호 가 10 인 기록 에 대해 서 만 행 트리거 조작 을 한정 했다.변 경 된 sal 과 comm 가 지금 보다 적 으 면 오 류 를 보고 하고 기록 을 삭제 하면 오 류 를 보고 하 며 다른 작업 이 실 행 됩 니 다.
create or replace trigger tr_emps
brfore update of sal, comm or dalete
on emp
for each row
when (old.deptno=10)-- 10
begin
case
when updating('sal') then
if :old.sal<:new.sal then
raise_application_error(-20002,' ');
end if;
when updating('comm') then
if :old.comm<:new.comm then
raise_application_error(-20003,' !');
end if;
when deleting then
raise_application_error(-20004,' ');
end case;
end;
트리거 의 온라인 업데이트
-- 행 트리거 를 이용 하여 직렬 업 데 이 트 를 실현 합 니 다 -- dept 표 부서 번 호 를 새 값 으로 바 꾸 면 emp 표 의 모든 부서 번 호 를 새 값 으로 바 꿔 야 합 니 다.
create or replace trigger tr_update_demp
after update of deptno
on dept
for each row
begin
update emp set deptno=:new.deptno where deptno=:old.deptno;
end;
트리거 의 보기 조작
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
트리거로 재고 관리 for SQLite3SQLite3 트리거를 사용하여 인벤토리 증감 로직 만들기 SQLite 버전 3.35.5. DB Browser for SQLite, 버전 3.12.2 에서 시도했습니다. 트리거 사양 전표 데이터가 추가되면 상품 테이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.