oracle系统触发器不能运行
发布网友
发布时间:2022-04-25 14:38
我来回答
共3个回答
热心网友
时间:2022-05-01 09:59
可能是因为你那个表中没有 libcardid字段 is not null 的值
我用你的句子实验成功;
[TEST1@orcl#30-11月-10] SQL>select * from test1;
TBNAME
--------------------------------
t1
t2
[TEST1@orcl#30-11月-10] SQL>create or replace trigger setnull
2 after startup on database
3 begin
4 update test1.test1 set tbname='aaa';
5 end;
6 /
触发器已创建
[TEST1@orcl#30-11月-10] SQL>conn /as sysdba
已连接。
[SYS@orcl#30-11月-10] SQL>shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
[SYS@orcl#30-11月-10] SQL>startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 83886784 bytes
Database Buffers 197132288 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
数据库已经打开。
[SYS@orcl#30-11月-10] SQL>select * from test1.test1;
TBNAME
--------------------------------
aaa
aaa
[SYS@orcl#30-11月-10] SQL>
热心网友
时间:2022-05-01 11:17
在对libcard进行update前,才能好用。对于以前的数据,要进行update
热心网友
时间:2022-05-01 12:51
触发器概述
触发器的概念及作用
触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:
(1) 强化约束(Enforce restriction)
触发器能够实现比CHECK 语句更为复杂的约束。
(2) 跟踪变化Auditing changes
触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
(3) 级联运行(Cascaded operation)。
触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。
(4) 存储过程的调用(Stored procere invocation)。
为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS( 数据库管理系统)本身之外进行操作。
由此可见,触发器可以解决高级形式的业务规则或复杂行为*以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(INSERT、 UPDATE、 DELETE)的多个触发器能够对同一种数据操作采取多种不同的处理。
总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。