oracle触发器怎么写(Oracle的触发器怎么写)
本文目录
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触发器怎么写
创建触发器,给触发器命名,在哪个表上的增删改进行触发,是否为行级触发
编写你的逻辑
编译检查是否有语法错误啥的
测试,这里的话,就是你某一个工种的最低工资增加,那属于这个工种的员工中原来是最低工资的也要增加,所以你要先把工种中最低工资查出来,根据工种号,查询属于该工种的人有哪些,把这些员工的工资查出来,再修改工种的最低工资,再查员工工资是否也增加了。
你这表也没有,我门也没有办法给你写一个很详细的。大致思路一般是这样
Oracle 触发器怎么写
这个只能遗憾的告诉你,不能实现因为触发器中不能运行 ddl语句和commit,rollback语句所谓的ddl语句就是用语定义和管理数据库中的对象,如Create,Alter,Drop,truncate等,DDL操作是隐性提交的!其实刚才写了一个,创建的时候没问题,但是往a里插入数据时报错create or replace trigger t_add_colafter insert on a for each rowbegin execute immediate ’alter table b add ’||:new.fieldname||’ varchar2(30)’;end; 错误就是ora-04092,你可以看一下
oracle的触发器怎么写
我以前做的一个例子,你参考下吧第八章触发器(Trigger)--格式:createorreplacetrigger名称declare.beginexception.end;--创建一个delete类型行级触发器--删除的一行数据保存在:oldcreateorreplacetriggeremp_delete_row_triggerafterdeleteonempreferencingnewasnoldasoforeachrowbegindbms_output.put_line(’emp_delete_row_triggercalled.’);dbms_output.put_line(’删除员工:’||:o.empno||’’||:o.ename);end;deletefromempwhereempno=7499;deletefromemp;--创建一个insert类型行级触发器--插入的一行新数据保存在:newcreateorreplacetriggeremp_insert_row_triggerafterinsertonempforeachrowbegindbms_output.put_line(’emp_insert_row_triggercalled.’);dbms_output.put_line(’添加员工:’||:new.empno||’’||:new.ename);end;insertintoemp(empno,ename)values(1,’empxxx’);--创建一个update类型行级触发器--修改前的数据保存在:old--修改后的数据保存在:newcreateorreplacetriggeremp_update_row_triggerafterupdateonempforeachrowbegindbms_output.put_line(’emp_update_row_triggercalled.’);dbms_output.put_line(’修改前:’||:old.empno||’’||:old.ename);dbms_output.put_line(’修改后:’||:new.empno||’’||:new.ename);end;updateempsetename=’xxxx’whereempno=7499;--语句级触发器(update,delete,insert)createorreplacetriggerdelete_stmt_triggerafterdeleteonempbegindbms_output.put_line(’delete_stmt_triggercalled.’);end;deletefromemp;--判断触发器类型------------------------------------------------------------每进行一次交易,就要调用触发器,自动扣除或增加账户金额----------------------------------------------------------createtableaccount(customerNamevarchar2(30)primarykey,cardIDvarchar2(8),currentMoneynumber);insertintoaccountvalues(’Daivd’,’10010001’,5000);insertintoaccountvalues(’Jason’,’10010002’,3000);createtabletrans(transDatedate,cardIDvarchar2(8),transTypevarchar2(10),transMoneynumber);insertintotransvalues(sysdate,’10010001’,’取款’,1000);createorreplacetriggertrans_triggerbeforeinsertontransforeachrowdeclarev_currentMoneyaccount.currentMoney%type;begin--判断类型if:new.transType=’取款’then--取款selectcurrentMoneyintov_currentMoneyfromaccountwherecardID=:new.cardID;ifv_currentMoney《:new.transMoneythenraise_application_error(-20001,’余额不足’);endif;updateaccountsetcurrentMoney=currentMoney-:new.transMoneywherecardID=:new.cardID;else--存款updateaccountsetcurrentMoney=currentMoney+:new.transMoneywherecardID=:new.cardID;endif;exceptionwhenno_data_foundthenraise_application_error(-20002,’无效的帐户’);end;--模式(schema)级触发器createorreplacetriggerschema_triggerbeforedroponschemabegindbms_output.put_line(’schema_triggercalled’);dbms_output.put_line(ora_dict_obj_name);dbms_output.put_line(ora_dict_obj_type);ifora_dict_obj_name=’ACCOUNT’thenraise_application_error(-20003,’ACCOUNT表不能被删除’);endif;end;droptableaccount;--ora_dict_obj_name操作对象名称--ora_dict_obj_type操作对象类型--启用触发器altertriggerschema_triggerenable;--禁用触发器altertriggerschema_triggerdisable;
ORACLE触发器怎么写
Create Or Replace Trigger tr_tablenameBefore Insert Or Update Of leader_adviceOn tablenameFor Each RowBegin If :New.leader_advice Is Not Null Then :New.doucument_status:=’已审批’; Else :New.doucument_status:=’未审批’; End If;End;
请教,oracle 触发器,怎么写
首先,触发器的触发是需要条件的,楼主的条件就是在b表中插入数据之后,触发触发器,并updatea表中day为b表中dayday,楼主可以这样写:CREATEORREPLACETRIGGERupdate_aAFTERINSERTONbFOREACHROWDECLAREV_NOa.no%type;V_DAYa.day%type;BEGINSELECTno,daydayINTOv_no,v_dayFROMb;UPDATEaSETDAY=V_DAY;WHERENO=V_NO;END;
求一个简单的oracle 触发器 写法
创建两个表:
create table a(stdid int,stdname varchar2(10));create table b(stdid int,stdname varchar2(10));创建触发器:
CREATE OR REPLACE TRIGGER tr_insert after insert ON a FOR EACH ROW BEGIN INSERT INTO b(stdid,stdname) VALUES(:new.stdid,:new.stdname);END;验证,在a表中插入数据:
insert into a values (1,’a’);commit;验证b表结果:
更多文章:

宋思明海藻什么电视剧(《蜗居》海藻下场凄惨,哪些细节表明宋思明是真的爱上她了)
2025年2月23日 10:10

wireshark下载官网(wireshark win64软件怎么用)
2025年3月12日 07:30

automaticupdates(无法启动Automatic Updates)
2025年3月23日 17:30

check into(辨析look into/check into)
2025年4月1日 19:40

ranger是什么车(福特Ranger Wildtrak这款车怎么样)
2025年3月8日 06:50

血色浪漫宁伟(电视剧《血色浪漫》中宁伟是什么时候认识钟跃民的)
2025年2月13日 05:30

adobeflash手机版下载(去哪里找手机最新版本的Adobe flash player)
2025年3月7日 17:20

getattribute方法(想请问各位servlet是如何接收前端的数据的)
2025年2月23日 05:40

穿梭时空的侠客txt下载(如果你能穿越到古代,你想成为什么样的人)
2025年3月20日 07:10

powerdesigner官网地址(求PowerDesigner9.5下载地址)
2025年2月10日 08:30

everybody knows i love you(everybody know i love you这首歌的歌词)
2025年3月26日 07:50