기능:1.표 의 수정 허용/제한 2.자동 으로 파생 열 을 생 성 합 니 다.예 를 들 어 필드 3,데이터 일치 성 강제 4,감사 와 로그 기록 제공 5,잘못된 사무 처리 방지 6,복잡 한 업무 논 리 를 사용 하여 create trigger biuferemployees_department_id before insert or update of department_id on employees referencing old as old_value new as new_value for each row when (new_value.department_id<>80 ) begin :new_value.commission_pct :=0; end; / 트리거 구성 부분:1,트리거 명칭 2,트리거 문장 3,트리거 제한 4,트리거 조작 1,트리거 명칭 create trigger biuferemployees_department_id 명명 습관:biufer(before insert update for each row)employees 표 이름 depart.mentid 열 이름 2,트리거 문,예 를 들 어 표 나 보기 의 DML 문 DDL 문 데이터베이스 종료 또는 시작,startup shutdown 등 before insert or update of depart.mentid on employees referencing old as old_value new as new_value for each row 설명:1.depart.mentid,employees 표 에 insert 를 진행 할 때 2,employees 표 에 대한 depart.mentid 열 업데이트 시 3,트리거 제한 when(newvalue.department_id<>80)제한 은 필수 가 아 닙 니 다.이 예 는 열 depart.mentid 가 80 이 아 닐 때 트리거 가 실 행 됩 니 다.그 중의 newvalue 는 새로운 값 과 그 후의 값 을 대표 합 니 다.4、트리거 동작 은 트리거 의 주체 begin:newvalue.commission_pct :=0; end; 주 체 는 간단 합 니 다.바로 업 데 이 트 된 comission 입 니 다.pct 열 이 0 으로 트리거 됨:insert into employee(employeeid, last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct ) values( 12345,'Chen','Donny', sysdate, 12, ‘[email protected]',60,10000,.25); select commission_pct from employees where employee_id=12345; 트리거 가 사용자 에 게 알 리 지 않 고 사용자 의 입력 값 을 바 꾸 었 습 니 다.트리거 유형:1.구문 트리거 2,행 트리거 3,INSTEAD OF 트리거 4,시스템 조건 트리거 5,사용자 이벤트 트리거 1,구문 트리거 는 표 나 특정한 상황 에서 보기 에서 실 행 된 특정 구문 이나 구문 그룹의 트리거 입 니 다.INSERT,UPDATE,DELETE 또는 그룹 과 연 결 될 수 있 습 니 다.그러나 어떤 조합 을 사용 하 든 각 문 트리거 는 지 정 된 문 구 를 대상 으로 한 번 만 활성화 된다.예 를 들 어 update 가 몇 줄 이 든 update 문 트리거 를 한 번 만 호출 합 니 다.예:표 에서 DML 작업 을 하 는 사용자 에 게 적절 한 특권 이 있 는 지 안전 검 사 를 해 야 합 니 다.Create table foo(a number); Create trigger biud_foo Before insert or update or delete On foo Begin If user not in (‘DONNY') then Raise_application_error(-20001, ‘You don't have access to modify this table.'); End if; End; / SYS 라 도 SYSTEM 사용 자 는 foo 표[시험]를 수정 하여 수정 표 의 시간,인물 에 대해 로그 기록 을 할 수 없습니다.1.시험 표 작성 table employeescopy as select*from hr.employees 2,로그 테이블 만 들 기 employeeslog( who varchar2(30), when date); 3、employeescopy 표 에 구문 트리거 를 만 들 고 트리거 에 employees 를 채 웁 니 다.로그 테이블.Create or replace trigger biud_employee_copy Before insert or update or delete On employees_copy Begin Insert into employees_log( Who,when) Values( user, sysdate); End; / 4,테스트 update employeescopy set salary= salary*1.1; select *from employess_log; 5.어떤 문구 가 작용 하 는 지 확인 합 니까?즉,INSERT/UPDATE/DELETE 중 어떤 트리거 가 트리거 되 었 습 니까?트리거 에서 INSERTING/UPDATING/DELETING 조건 서술 어 를 사용 하여 판단 할 수 있 습 니 다:begin if inserting then-elsif updating then-elsif deleting then-end if;end; if updating(‘COL1') or updating(‘COL2') then ------ end if; [시험]1、로그 테이블 변경 alter table employeeslog add (action varchar2(20)); 2.트리거 를 수정 하여 문장의 유형 을 기록 할 수 있 습 니 다.Create or replace trigger biud_employee_copy Before insert or update or delete On employees_copy Declare L_action employees_log.action%type; Begin if inserting then l_action:='Insert'; elsif updating then l_action:='Update'; elsif deleting then l_action:='Delete'; else raise_application_error(-20001,'You should never ever get this error.'); Insert into employees_log( Who,action,when) Values( user, l_action,sysdate); End; / 3,테스트 insert into employeescopy( employee_id, last_name, email, hire_date, job_id) values(12345,'Chen','Donny@hotmail',sysdate,12); select *from employees_log update employees_copy set salary=50000 where employee_id = 12345; 2.행 트리거 란 영향 을 받 은 각 줄 을 활성화 하기 위 한 트리거 를 말 합 니 다.정 의 는 구문 트리거 와 유사 합 니 다.다음 과 같은 두 가지 예외 가 있 습 니 다.1.정의 문 에는 FOR EACH ROW 자구 2 가 포함 되 어 있 고 BEFORE...FOR EACH ROW 트리거 에서 사용 자 는 영향 을 받 은 줄 값 을 참조 할 수 있 습 니 다.예 를 들 어:정의:create trigger biuferemployees_department_id before insert or update of department_id on employees_copy referencing old as old_value new as new_value for each row when (new_value.department_id<>80 ) begin :new_value.commission_pct :=0; end; / Referencing 자구:DML 문 구 를 실행 하기 전의 값 의 기본 이름 은 old 입 니 다.그 다음 값 은 new insert 작업 만 있 습 니 다:new delete 작업 만 있 습 니 다.old update 작업 은 둘 다 referencing 자구 가 있 습 니 다.new 와 old 를 new 로 이름 만 바 꿉 니 다.value 와 oldvalue,목적 은 혼동 을 피 하 는 것 이다.예 를 들 어 new 라 는 시 계 를 조작 할 때.작용 이 크 지 않다.시험]:주 건 생 성 자체 증가 시퀀스 번호 drop table foo;create table foo(id number, data varchar2(20)); create sequence foo_seq; create or replace trigger bifer_foo_id_pk before insert on foo for each row begin select foo_seq.nextval into :new.id from dual; end; / insert into foo(data) values(‘donny'); insert into foo values(5,'Chen'); select * from foo; 3,INSTEAD OF 트리거 업데이트 보기 Create or replace view companyphone_book as Select first_name||', '||last_name name, email, phone_number, employee_id emp_id From hr.employees; 이메일 과 name update hr.company 업데이트 시도phone_book set name='Chen1, Donny1' where emp_id=100 create or replace trigger update_name_company_phone_book INSTEAD OF Update on hr.company_phone_book Begin Update hr.employees Set employee_id=:new.emp_id, First_name=substr(:new.name, instr(:new.name,',')+2), last_name= substr(:new.name,1,instr(:new.name,',')-1), phone_number=:new.phone_number, email=:new.email where employee_id=:old.emp_id; end; 4.시스템 이벤트 트리거 시스템 이벤트:데이터베이스 시작,종료,서버 오류 create trigger adstartup after startup on database begin -- do some stuff end; / 5.사용자 이벤트 트리거 사용자 이벤트:사용자 로그 인,로그아웃,CREATE/ALTER/DROP/ANALYZE/AUDIT/GRANT/REVOKE/RENAME/TRUNCATE/LOGOFF 예:기록 삭제 대상 1.로그 시트 create table dropedobjects( object_name varchar2(30), object_type varchar2(30), dropped_on date); 2.트리거 create 또는 replace trigger logdrop_trigger before drop on donny.schema begin insert into droped_objects values( ora_dict_obj_name,--트리거 와 관련 된 함수 oradict_obj_type, sysdate); end; / 3.테스트 create table dropme(a number); create view drop_me_view as select *from drop_me; drop view drop_me_view; drop table drop_me; select *from droped_objects 트리거 alter trigger disable; alter trigger enable; 트 랜 잭 션 처리:트리거 에 서 는 commt/rollback 을 사용 할 수 없습니다.dl 문 구 는 암시 적 인 commt 가 있 기 때문에 보 기 를 사용 할 수 없습니다:dbatriggers
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: