触发器ora-04091
该线程包含一些有关oracle中TRIGGERS的有用的技巧/示例代码,论坛成员可能会觉得有用。
触发器:
===============
数据库触发器是对数据库中的事件执行的PL / SQL块。
该事件与表的特定数据操作有关,例如插入,删除或更新表的行。
可以使用触发器:
1.实施复杂的业务规则,这不能使用完整性约束来实现。
2.审核过程。 例如,跟踪对表所做的更改。
3.在发生其他相关动作时自动执行动作。 例如,只要在另一张表中插入一行,就更新一张表。
触发器类型:
------------------------
根据触发触发器的时间,可以将其归类为:
语句级触发器
b。行触发
c。触发前
d。触发后
e。代替触发器
句法:
-----------
创建[或替换]触发触发器名称
{之前| 之后| 代替}
{删除| 插入| UPDATE [OF列]}
[或{删除| INSERT | UPDATE [OF列]}] ...
在table_name | SCHEMA
[正在刷新[旧的旧版本] [新的新版本]]
[每行[当条件时]]
<PL / SQL块>
触发样本示例#1
====================
CREATE OR REPLACE TRIGGER MYTRIG AFTER INSERT OR DELETE ON EMP
DECLARE
MCOUNT NUMBER;
BEGIN
SELECT COUNT(*) INTO MCOUNT FROM EMP;
--checks the number of records in the table.
DBMS_OUTPUT.PUT_LINE('THE TOTAL NUMBER OF EMPLOYEE ARE:' || MCOUNT);
--and displays the same after the event .
END;
触发示例Ex#2
================
CREATE OR REPLACE TRIGGER ONLYPOSITIVE BEFORE INSERT OR UPDATE OF SAL ON EMP FOR EACH ROW
BEGIN
IF :NEW.SAL<0 THEN
--checks of the value inserted into teh sal column is less than 0.
RAISE_APPLICATION_ERROR(-20100,'PLEASE INSERT A POSITIVE VALUE');
--if valus is less than 0 ,then raise the exception.
END IF;
END;
注意:-Trigger不允许负值插入/更新到表中。
触发范例#3
==================
CREATE OR REPLACE TRIGGER NODELETE BEFORE INSERT OR UPDATE OR DELETE ON DEPT FOR EACH ROW
BEGIN
IF INSERTING THEN
RAISE_APPLICATION_ERROR(-20020,'CAN''T INSERT NEW RECORDS TO THIS TABLE');
ELSIF UPDATING THEN
RAISE_APPLICATION_ERROR(-20021,'CAN''T UPDATE RECORDS OF THIS TABLE');
ELSIF DELETING THEN
RAISE_APPLICATION_ERROR(-20022,'YOU ARE NOT AUTHORISED TO DELETE THESE RECORDS');
END IF;
END;
注意:-触发器通过不允许在其上使用任何DML来使触发器变为只读。
触发示例示例4
================
create or replace trigger mytrig
before insert on emp
declare
a char(3);
begin
--selects the system day to the vaiable.
select to_char(sysdate,'dy') into a from dual;
if a in('sun','sat') then
--restrict any transaction on saturday and sunday.
Raise_application_error(-20004,'Cannot do manipulation today');
end if;
end;
注意:-此触发器将限制周末桌上的交易。
还要检查
触发器-2翻译自: https://bytes.com/topic/oracle/insights/753142-triggers-1-a
触发器ora-04091