oracle触发器怎么做,oracle如何写一个触发器

Oracle触发器,求大神详细讲解

1

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、网络空间、营销软件、网站建设、罗城网站维护、网站推广。

创建table1:

CREATE

TABLE

table1

(

id

number(5),

name

char(20),

age

number(2),

);

2

创建table2,并给count字段初值为0

CREATE

TABLE

table2

(

count

number(5),

);

INSERT

INTO

table2

VALUES

(0);

3

插入触发器

CREATE

OR

REPLACE

TRIGGER

add_after_insert

AFTER

INSERT

ON

table1

FOR

EACH

ROW

DECLARE

v_currentCount

number(5);

BEGIN

SELECT

count

INTO

v_currentCount

FROM

table2;

UPDATE

table2

SET

count

=

v_currentCount

+1;

END

4

删除触发器

CREATE

OR

REPLACE

TRIGGER

add_after_delete

AFTER

DELETE

ON

table1

FOR

EACH

ROW

DECLARE

v_currentCount

number(5);

BEGIN

SELECT

count

INTO

v_currentCount

FROM

table2;

UPDATE

table2

SET

count

=

v_currentCount

+1;

END

5

更新触发器

CREATE

OR

REPLACE

TRIGGER

add_after_update

AFTER

UPDATE

ON

table1

FOR

EACH

ROW

DECLARE

v_currentCount

number(5);

BEGIN

SELECT

count

INTO

v_currentCount

FROM

table2;

UPDATE

table2

SET

count

=

v_currentCount

+1;

END

oracle的触发器怎么写

我以前做的一个例子,你参考下吧第八章触发器(Trigger)--格式:createorreplacetrigger名称[after|before][delete|update|insert][on表|onschema][referencingnewas别名oldas别名][foreachrow]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触发器怎么写?

创建触发器,给触发器命名,在哪个表上的增删改进行触发,是否为行级触发

编写你的逻辑

编译检查是否有语法错误啥的

测试,这里的话,就是你某一个工种的最低工资增加,那属于这个工种的员工中原来是最低工资的也要增加,所以你要先把工种中最低工资查出来,根据工种号,查询属于该工种的人有哪些,把这些员工的工资查出来,再修改工种的最低工资,再查员工工资是否也增加了。

你这表也没有,我门也没有办法给你写一个很详细的。大致思路一般是这样

求一个简单的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表结果:

Oracle如何创建触发器

一般在sqlplus或者其他第三方oracle工具中,按照语法及需求写好代码,直接执行创建过程即可。

一般语法如下:

CREATE [OR REPLACE] TRIGGER trigger_name

{BEFORE | AFTER }

{INSERT | DELETE | UPDATE [OF column [, column …]]}

[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]

ON [schema.]table_name | [schema.]view_name 

[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]

[FOR EACH ROW ]

[WHEN condition]

PL/SQL_BLOCK | CALL procedure_name;

oracle创建触发器

你说的这东西本身就不适合弄做触发器

std表是部门号与某部门的平均工资

如果往emp里插入一条记录的话,那么整个部门的平均工资就会发生变化

所以这个时候std表里的数据就不是真正的平均工资了

不知道为什么要这么做,你们老师想不开吧?

而且emp1的表结构是什么?

还有,工资低于所属部门的平均工资的职员信息插入到emp1表中?

那么难道不是每插入一个员工的话,emp1表就要插入一遍,那么emp1表里会有N

多重复数据


新闻名称:oracle触发器怎么做,oracle如何写一个触发器
分享网址:http://scyanting.com/article/phchje.html