我想创建一个触发器来捕获INSERT并UPDATE根据操作执行某些操作。在 Oracle 中可以这样做:
CREATE OR REPLACE TRIGGER ABC_BIU BEFORE INSERT OR UPDATE ON ABC
FOR EACH ROW
BEGIN
IF INSERTING THEN
...
END IF;
...
END;
Run Code Online (Sandbox Code Playgroud)
这里提到that是Oracle中INSERTING与the结合使用的一个关键字,在这里你可以看到用法:TRIGGER
IF INSERTING THEN ... END IF;
IF UPDATING THEN ... END IF;
Run Code Online (Sandbox Code Playgroud) 这是我的代码:
create or replace trigger tr_interdit
before delete on reservation
for each row
DECLARE
V_res_date RESERVATION.DATEFIN%type;
begin
SELECT DATEFIN into V_res_date
FROM reservation
where DATEFIN = :old.DATEFIN;
if V_res_date<add_months(V_res_date,-12)
then RAISE_APPLICATION_ERROR(-20001, 'Date fin na pas depasse un ans');
end if;
end tr_interdit;
/
Run Code Online (Sandbox Code Playgroud)
但是当我删除一行后,即使它不应该被删除,我也会收到这个错误.
这是错误:
删除"DANIEL"."保留",其中ROWID ='AAAFCvAABAAALHhAAA'和ORA_ROWSCN ='3392006'和("NUMR"为空或"NUMR"不为空)ORA-04091:表DANIEL.RESERVATION正在变异,触发/功能可能看不到它ORA-06512:在"DANIEL.TR_INTERDIT",第4行ORA-04088:执行触发器'DANIEL.TR_INTERDIT'时出错
我有一个与 T-SQL 中的数据库触发器相关的问题。
我想创建一个只允许特定词(可用,不可用)列的触发器avalability。
怎么做?
我明白触发器是什么,但在命令序列中迷失了 - 什么应该在什么之后。
有没有办法防止从表中选择,比如在 9 到 5 之间允许选择,否则不返回任何内容?
触发器用于 DML、DDL、数据库操作。
用程序来做,并检查时间/其他条件是否正确?
或者有没有更简单的方法来防止选择?
在特定数据库 (MS SQL Server) 上创建 DDL 触发器需要哪些权限?
oracle ×3
sql ×2
sql-server ×2
ddl ×1
permissions ×1
plpgsql ×1
plsql ×1
postgresql ×1
t-sql ×1
triggers ×1