oracle trigger(oracle trigger 问题)
本文目录
- oracle trigger 问题
- oracle 触发器
- oracle中的trigger有几种啊
- oracle中触发器有什么作用
- oracle trigger怎么调试
- oracle 中以下trigger什么意思,何时用
- oracle触发器的具体定义,什么时候用到!其优点是什么!
- Oracle数据库中利用Trigger监控删除数据操作
oracle trigger 问题
create or replace trigger emp_sysdate_tribefore insert on empfor each rowbegin:new.hiredate:=sysdate;end emp_sysdate_tri;
oracle 触发器
唉,又是大学生,老不动脑筋,这样怎么进步咧.给你个例子,自己研究.第八章 触发器(Trigger)--格式:create or replace trigger 名称 declare ....begin ...exception ....end;--创建一个delete类型行级触发器--删除的一行数据保存在:oldcreate or replace trigger emp_delete_row_triggerafter deleteon empreferencing new as n old as ofor each rowbegin dbms_output.put_line(’emp_delete_row_trigger called.’); dbms_output.put_line(’删除员工:’ || :o.empno || ’ ’ || :o.ename);end;delete from emp where empno=7499;delete from emp;--创建一个insert类型行级触发器--插入的一行新数据保存在:newcreate or replace trigger emp_insert_row_triggerafter inserton empfor each rowbegin dbms_output.put_line(’emp_insert_row_trigger called.’); dbms_output.put_line(’添加员工:’ || :new.empno || ’ ’ || :new.ename);end;insert into emp(empno,ename) values(1,’empxxx’);--创建一个update类型行级触发器--修改前的数据保存在:old--修改后的数据保存在:newcreate or replace trigger emp_update_row_triggerafter updateon empfor each rowbegin dbms_output.put_line(’emp_update_row_trigger called.’); dbms_output.put_line(’修改前:’ || :old.empno || ’ ’ || :old.ename); dbms_output.put_line(’修改后:’ || :new.empno || ’ ’ || :new.ename);end;update empset ename=’xxxx’where empno=7499;--语句级触发器(update,delete,insert)create or replace trigger delete_stmt_triggerafter deleteon empbegin dbms_output.put_line(’delete_stmt_trigger called.’);end;delete from emp;--判断触发器类型------------------------------------------------------------每进行一次交易,就要调用触发器,自动扣除或增加账户金额----------------------------------------------------------create table account( customerName varchar2(30) primary key, cardID varchar2(8), currentMoney number);insert into account values(’Daivd’,’10010001’,5000);insert into account values(’Jason’,’10010002’,3000);create table trans( transDate date, cardID varchar2(8), transType varchar2(10), transMoney number);insert into trans values(sysdate,’10010001’,’取款’,1000);create or replace trigger trans_triggerbefore inserton transfor each rowdeclare v_currentMoney account.currentMoney%type;begin --判断类型 if :new.transType=’取款’ then --取款 select currentMoney into v_currentMoney from account where cardID=:new.cardID; if v_currentMoney 《 :new.transMoney then raise_application_error(-20001,’余额不足’); end if; update account set currentMoney=currentMoney-:new.transMoney where cardID=:new.cardID; else --存款 update account set currentMoney=currentMoney+:new.transMoney where cardID=:new.cardID; end if;exception when no_data_found then raise_application_error(-20002,’无效的帐户’);end;--模式(schema)级触发器create or replace trigger schema_triggerbefore dropon schemabegin dbms_output.put_line(’schema_trigger called’); dbms_output.put_line(ora_dict_obj_name); dbms_output.put_line(ora_dict_obj_type); if ora_dict_obj_name=’ACCOUNT’ then raise_application_error(-20003,’ACCOUNT表不能被删除’); end if;end;drop table account;--ora_dict_obj_name 操作对象名称--ora_dict_obj_type 操作对象类型--启用触发器alter trigger schema_trigger enable;--禁用触发器alter trigger schema_trigger disable;
oracle中的trigger有几种啊
ORACLE数据库有四种触发器,分别是DML、Instead-of、DDL、DB触发器,一般的应用系统中都是用到DML、Instead-of触发器,DDL、DB两种触发器是DBA管理数据库用得比较多四种触发器分别有不同的作用一、DML触发器:当发出UPDATE、INSERT、DELETE命令就可以触发已定义好的DML触发器,是最简单和常用的一种触发器语法:create or replace trigger trigger_nameafter|before insert|update|deleteon table_namefor each row二、Instead-of触发器:当向一个由多个表联接成的视图作DML操作时,一般情况下是不允许的,这时候就可以用Instead-of触发器来解决这种问题(在触发器写代码分别对各表作相应DML操作),语法是这样的:create or replace trigger trigger_nameinstead of insert|update|deleteon view_namefor each row三、DDL触发器:当发出CREATE、ALTER、DROP、TRUNCATE命令时会触发已定义好的DDL触发器,这种触发器可以用来监控某个用户或整个数据库的所有对象的结构变化语法:create or replace trigger trigger_namebefore|after create|alter|drop|truncateon schema|database例:--禁止用CREATE、ALTER、DROP、TRUNCATE命令操作APPS用户的对象create or replace trigger apps_no_ddlbefore create or alter or drop or truncateon appsbeginraise_application_error(-20001,’不允许用DDL操作APPS用户的对象’);end;四、DB事件触发器:当STARTUP、SHUTDOWN、LOGON、LOGOFF数据库时就会触发DB事件触发器,这种触发器可以用来监控数据库什么时候关闭/打,或者用户的LOGON/LOGOFF数据库情况语法:create or replace trigger trigger_namebefore|after startup|shutdown|logon|logoffon database例:--记录数据库关闭的时间(shutdown类型要用关键字before,startup用after)create or replace trigger db_shutdownbefore shutdownon databasebegininsert 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_dbafter logonon databasebegininsert into test_tbl(username,logon_time) values(user,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’));commit;end;注意:要创建DDL和DB事件这两种触发器必须要有DBA的权限才行
oracle中触发器有什么作用
。触发器的定义就是说某个条件成立的时候,你触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。然后,触发器的触发条件其实在你定义的时候就已经设定好的了。这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。具体举例:1.在一个表中定义的语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的操作过程。这个就是删除表的操作就是触发器执行的条件了。2.在一个表吕定义了行级的触发器,那当这个表中一行数据发生变化的时候,比如删除了一行记录,那触发器也会被自动执行了。不知这样讲述可否清楚了呢?
oracle trigger怎么调试
用第三方工具吧,rapid sql都可以单布调试的, 调试的方法有很多,如建立临时表,用dbms_output包打印输出,用oracle提供的工具来跟踪并记录日志。看看相关的书好了,简单的,用“show errors“可以察看错误。
oracle 中以下trigger什么意思,何时用
触发器trigger是触发器,它的功能是当你遇到进程开/关,数据库开/关,数据插入/前后等事件时,而触发到另外的操作1.在遇到关键字commit时触发2.在执行form之前触发3.当创建新的form时触发4.当tab改变时触发5.当遇到有效日期时触发6.当遇到关键字listval时触发
oracle触发器的具体定义,什么时候用到!其优点是什么!
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。触发器的优点 触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。
Oracle数据库中利用Trigger监控删除数据操作
我给你写一个。稍等,我先占个头坑。请告诉我B表跟A表的关系,以及关联字段。谢谢。QQ17369841CREATEORREPLACETRIGGERTR_COPY_DATABEFOREDELETEONAFOREACHROWBEGININSERTINTOLOGA(A的字段1,A的字段2,A的字段3,delete_id,DELETE_TIME)VALUES(:old.A的字段1,:old.A的字段2,:old.A的字段3,USER,SYSDATE);INSERTINTOLOGBSELECTB.*FROMA,BWHEREA.***=B.***;ENDTR_COPY_DATA;
更多文章:

vue路由面试题(后端路由搭配vue-router的使用问题)
2025年2月9日 22:40

icmp协议的主要功能是(试简单说明ip,arp,rarp,icmp的作用)
2025年3月28日 08:40

velocity global(英语作文 怎么拯救我们的星球80词以内 速求!!!)
2025年3月14日 15:40

cocktail lounge是什么意思(lounge是什么意思)
2025年2月15日 22:20

电脑上的哪些应用商店的软件最全和最好?现在哪个电脑版的应用商店好用
2025年3月31日 16:30

lookup函数的使用方法公式(在Excel表格中,怎样使用LOOKUP函数,请举例说明,谢谢!)
2025年3月23日 18:40

ordinary和common区别(common和ordinary有什么区别啊)
2025年3月16日 05:50