包含oracletrigger的词条

http://www.itjxue.com  2023-01-25 09:57  来源:未知  点击次数: 

oracle怎么查看看触发器的源代码?

select * ?from user_objects where object_name = trigger_name ?and status='INVALID'

甲骨文股份有限公司(NASDAQ:ORCL,Oracle)是全球大型数据库软件公司。总部位于美国加州红木城的红木岸(Redwood Shores),现时首席执行官为公司创办人劳伦斯·埃里森(Lawrence J. Ellison)。

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。

触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。

触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。

触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

oracle trigger怎么调试

用第三方工具吧,rapid sql都可以单布调试的, 调试的方法有很多,如建立临时表,用dbms_output包打印输出,用oracle提供的工具来跟踪并记录日志。看看相关的书好了,简单的,用"show errors"可以察看错误。

oracle中的trigger有几种啊

ORACLE数据库有四种触发器,分别是DML、Instead-of、DDL、DB触发器,一般的应用系统中都是用到DML、Instead-of触发器,DDL、DB两种触发器是DBA管理数据库用得比较多

四种触发器分别有不同的作用

一、DML触发器:当发出UPDATE、INSERT、DELETE命令就可以触发已定义好的DML触发器,是最简单和常用的一种触发器

语法:

create or replace trigger trigger_name

after|before insert|update|delete

on table_name

for each row

二、Instead-of触发器:当向一个由多个表联接成的视图作DML操作时,一般情况下是不允许的,这时候就可以用Instead-of触发器来解决这种问题(在触发器写代码分别对各表作相应DML操作),语法是这样的:

create or replace trigger trigger_name

instead of insert|update|delete

on view_name

for each row

三、DDL触发器:当发出CREATE、ALTER、DROP、TRUNCATE命令时会触发已定义好的DDL触发器,这种触发器可以用来监控某个用户或整个数据库的所有对象的结构变化

语法:

create or replace trigger trigger_name

before|after create|alter|drop|truncate

on schema|database

例:

--禁止用CREATE、ALTER、DROP、TRUNCATE命令操作APPS用户的对象

create or replace trigger apps_no_ddl

before create or alter or drop or truncate

on apps

begin

raise_application_error(-20001,'不允许用DDL操作APPS用户的对象');

end;

四、DB事件触发器:当STARTUP、SHUTDOWN、LOGON、LOGOFF数据库时就会触发DB事件触发器,这种触发器可以用来监控数据库什么时候关闭/打,或者用户的LOGON/LOGOFF数据库情况

语法:

create or replace trigger trigger_name

before|after startup|shutdown|logon|logoff

on database

例:

--记录数据库关闭的时间(shutdown类型要用关键字before,startup用after)

create or replace trigger db_shutdown

before shutdown

on database

begin

insert into test_tbl(log_event) values('db shutdown at '||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));

commit;

end;

--记录用户LOGON时间(logoff类型要用关键字before,logon用after)

create or replace trigger user_logon_db

after logon

on database

begin

insert into test_tbl(username,logon_time) values(user,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));

commit;

end;

注意:要创建DDL和DB事件这两种触发器必须要有DBA的权限才行

Oracle数据库中利用Trigger监控删除数据操作

我给你写一个。稍等,我先占个头坑。

请告诉我B表跟A表的关系,以及关联字段。

谢谢。

QQ

17369841

CREATE

OR

REPLACE

TRIGGER

TR_COPY_DATA

BEFORE

DELETE

ON

A

FOR

EACH

ROW

BEGIN

INSERT

INTO

LOGA(A的字段1,A的字段2,A的字段3,delete_id,DELETE_TIME)

VALUES(:old.A的字段1,:old.A的字段2,:old.A的字段3,USER,SYSDATE)

;

INSERT

INTO

LOGB

SELECT

B.*

FROM

A,B

WHERE

A.***

=

B.***

;

END

TR_COPY_DATA

;

Oracle中触发器是干嘛的?

1,大白话版本:当给A表执行insert,update等操作时,需要在改操作前或者操作后同时在数据库做其他操作时就需要触发器,比如给A执行insert成功后记录操作日志

2,例:

create or replace trigger trigger_A

after update on A begin

insert into log(ID, OPERATOR,TIME) VALUES( );

end;

注:values里的值自己写,例2的触发器就是在给A表修改后往日志表log记录日志

(责任编辑:IT教学网)

更多

推荐ASP.NET教程文章