create table test(name varchar2(60),id number null);
create table test1(name varchar2(60),id number null,tel number null);我想创建一个触发器,当删除test表中记录时,调用触发器来删除test1表中具有相同id的记录,
下面sql语句创建触发器有什么问题?为什么创建不成功?(环境oracle 9i)
CREATE or replace trigger test_trigger before delete on test
begin
delete from test1 where deleted.id =id;
end;
解决方案 »
- 如何把有断行的段落取出来时只显示一行?
- clob类型转换为xmlTpye
- 最基础的Oracle的结构的问题
- 怎样写类似的sql语句?
- 向高手们请教升级Oracle的时候都应该注意哪儿些问题
- oracle 中 用 sql 语句如何更新用户的口令?
- Oracle9.2.0.2安装时发生GetAllOracleHomes错误自动退出,报告jvm.dll的问题
- sql命令,在oracle 8.0.5 中可以正常使用,但在oracle 7.3 中报错,是何缘故?
- 论坛怎么给分?我怎么给不了阿?
- oracle数据库建立的选项,专用服务器和共享服务器有什么区别,,???
- dbms_output.put()执行了不打印任何东西
- Oracle创建表,自动生成列自动统计的问题
改为
delete from test1 where deleted.id =:old.id;
begin
delete from test1 where deleted.id =:ole.id;
end;好像把or replace 可以去掉
before delete on test
for each row --行级触发
begin
delete from test1 where test1.id =:old.id;
end;不要把SQLServer与Oracle搞混了
触发器声明为行级触发器(此情况下,它在每行修改之前或之后执行)或语句级触发器(此情况下,它在整个触发器语句完成后执行)。可以定义行级触发器在插入、更新或删除之前 (BEFORE) 或之后 (AFTER) 执行。语句级触发器在语句后 (AFTER) 执行。RESOLVE 触发器事件用于 SQL Remote:它仅在行级 UPDATE 或 UPDATE OF column-lists 之前触发。要将触发器声明为行级触发器,请使用 FOR EACH ROW 子句。要将触发器声明为语句级触发器,可以使用 FOR EACH STATEMENT 子句或忽略 FOR EACH 子句。为清楚起见,建议在声明语句级触发器时输入 FOR EACH STATEMENT 子句。
好好看看基础 在ORACLE中没有DELETED这个关键字,
:NEW和:OLD名称可以改,在触发器定义中
REFERENCING OLD AS DELETED NEW AS INSERTED
FOR EACH ROW
但,还是得在前面加冒号: