Oracle 트리거 사용 안내
28300 단어 Oacle
create or replace
trigger is tri_update[/insert/delete/UID]_tableName
before[after] insert[update/delete/or 。。。] on tableName
[for each row]-- , ,
[declare
locateParamater1 type;
locateParamater1 type;]
-- begin...end;
begin
--do something;
end;
(1) new 와 old 에 대해 서 는 사용 하기 전에 실제 와 연락 하여 생각해 보 세 요. insert 할 때 old 가 없 을 거 예요. delete 할 때 new 가 없 을 거 예요. update 할 때 old 와 new 가 동시에 가지 고 있 을 거 예요. 그리고 new 와 old 는 모두 rowtype 이 라 고 지적 하면 해당 줄 을 대표 할 수 있어 요.new 와 old 의 실제 용법 에 대해 서 는 실례 를 보십시오.
(2) when 에 대해 서 는 안에 있 는 old 와 new 를 주의해 야 합 니 다. 사칭 이 없습니다.그리고 raiseapplication_error 는 그의 참가 형식 (number, 'Some thing you want to say') 을 주의해 야 한다. 그 중의 number 는 - 2000 에서 - 20999 까지 이다.
/* :
、 SC , ( )SC_NUMBER( ) 。*/
create or replace
trigger tr_Insert_Sc after insert on sc
for each row
begin
--insert :new
update SC_Number set ccount=ccount+1 where SC_Number.Sno=:new.Sno;
end;
/*
、 SC , ( )SC_NUMBER 。*/
insert into sc values('008','C01','92');
delete from sc where sno='008' and cno='C01'
select * from sc where sno='008'
select * from SC_Number;
create or replace
trigger tr_Delete_Sc after delete on sc
for each row
begin
update SC_Number set ccount=ccount-1 where SC_Number.Sno=:old.Sno;
end;
/*
、 SC , , SC_NUMBER ,
“ ( ) ” 。*/
insert into sc values('008','C01','92');
delete from sc where sno='008' and cno='C01'
select * from sc where sno='008'
select * from sc where sno='002'
select * from SC_Number;
update sc set sno='008' where sno='002'
update sc set grade=90 where sno='008' and cno='C06'
create or replace
trigger tr_Edit_SC after update on SC
for each row
declare
student_name student.sname%type;
begin
if :new.sno=:old.sno then
select sname into student_name from student where student.sno=:new.sno;
dbms_output.put_line(student_name||'Have changed');
end if;
if :new.sno<>:old.sno then
update SC_Number set ccount=ccount-1 where SC_Number.Sno=:old.Sno;
update SC_Number set ccount=ccount+1 where SC_Number.Sno=:new.Sno;
end if;
end;
/* 1、 STUDENT , ( CS )。*/
select * from student;
update student set student.sname='XXX' where student.sno='003';
create or replace
trigger tr_Edit_Student_cons before update on student
for each row
when(old.sdept='CS')
begin
raise_application_error(-20044,'You Cannot edit the information of cs department');
end;
/*2、 , ‘S’ 3 。*/
insert into course values('S01','Oracle',3,4)
delete from course where course.cno='S01';
select * from course;
create or replace
trigger tr_Edit_Course_cons before insert on course
for each row
when(new.credit<=5 and new.cno like 'S%')
begin
raise_application_error(-20023,'You can not insert the course name ');
end;
/*
、 90 。*/
update sc set grade=98 where sno='003' and cno='C10'
delete from sc where sno='003' and cno='C10'
select * from sc;
create or replace
trigger tr_delete_SC before delete on SC
for each row
when(old.grade>90)
begin
raise_application_error(-20017,'My grade beyond 90,You cannot delete me');
end;
/*
Student ,CS 30 。*/
select * from student;
insert into student values('044','Shawn',21,'m','CS');
delete from student where student.sno='044';
create or replace
trigger tr_insert_Student before insert on student
for each row
when(new.sdept='CS' and new.sage>30)
begin
raise_application_error(-20078,'I am a Cs student.My age should little than 30');
end;
/*
Student , , 。*/
select * from student;
update student set sage=38 where sno='004'
create or replace
trigger tr_update_Student before update on student
for each row
when(new.sage<old.sage)
begin
raise_application_error(-20089,'Only can beyond the old age!');
end;
/*
Student , SC 60, 60,
, , SC 。*/
select round(avg(grade),2),sno from sc group by sno
delete from student where student.sno='004'
select * from sc
select * from student where student.sno='001'
create or replace
trigger tr_delete_student_cons before delete on student
for each row
declare
avg_score number(4,2);
begin
select round(avg(grade),2) into avg_score from sc where sc.sno=:old.sno;
if avg_score>70.00 then
raise_application_error(-20058,'My average score beyond 60!!!!');
else
delete from sc where sc.sno=:old.sno;
end if;
end;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
activemq 5.5 의 입문 은 설치, 시작, 데이터베이스 지속 화 를 포함한다Apache ActiveMQ 5.5.0 은 주로 유지보수 버 전 으로 130 개가 넘 는 문 제 를 복 구 했 으 며 대부분 bug 와 개선 이 었 다. Improved performance for offline d...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.