百度
360搜索
搜狗搜索

oracle触发器写法,ORACLE INSERT触发器如何写详细介绍

本文目录一览: 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表结果:
如果业务需要在插入前作判断就是说 当且仅当 表A插入的 stdid在表C中存在 也就是说 表A新插入的的 stdid in select stdid from C 时 才执行下面插入表B的动作
创建个c表
create table c
(stdid int);
插入一条数据:
insert into c values (1);
commit;
触发器修改为:
CREATE OR REPLACE TRIGGER tr_insert
after insert
ON a
FOR EACH ROW
declare v_count int;
BEGIN
select count(*) into v_count from c where stdid =:new.stdid;
if v_count=0
then
INSERT INTO b(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
end if;
END;
然后分别往a表中插入id=1和id=2的数据,剩下的自己验证吧, 不给你截图了

oracle数据库如何创建触发器实例

Oracle DBA Studio 工具里面就能创建触发器 CREATE TRIGGER 名称 CREATE TRIGGER 创建一个新触发器 语法 CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] } ON table FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE func ( arguments ) 输入 n Oracle DBA Studio 工具里面就能创建触发器CREATE TRIGGER 名称 CREATE TRIGGER — 创建一个新触发器 语法 CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] } ON table FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE func ( arguments ) 输入 name 触发器名称. table 表名称. event INSERT,DELETE 或 UPDATE 之一. funcname 一个用户提供的函数. 输出 CREATE 如果触发器成功创建,返回此信息. 描述 CREATE TRIGGER 将向现有数据库中增加一个新的触发器.触发器将与表 table 相联并且将执行声明的函数 funcname. 触发器可以声明为在对记录进行操作之前(在检查约束之前和 INSERT,UPDATE 或 DELETE 执行前)或之后(在检查约束之后和完成了 INSERT,UPDATE 或 DELETE 操作)触发.如果触发器在事件之前,触发器可能略过当前记录的操作或改变被插入的(当前)记录(只对 INSERT 和 UPDATE 操作有效).如果触发器在事件之后,所有更改,包括最后的插入,更新或删除对触发器都是"可见"的. 请参考 PostgreSQL 程序员手册 中SPI 和触发器章节获取更多信息. 注意 CREATE TRIGGER 是一个 Postgres 语言扩展. 只有表所有者可以就此表创建一个触发器. 在当前的版本(v7.0),STATEMENT 触发器还没有实现. 请参考 DROP TRIGGER 获取如何删除触发器的信息. 用法 在插入或更新表 films 之前检查一下声明的分销商代码是否存在于 distributors 表中: CREATE TRIGGER if_dist_exists BEFORE INSERT OR UPDATE ON films FOR EACH ROW EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did'); 在删除或更新一个分销商的内容之前,将所有记录移到表 films 中(译注:好象与例子意义不同): CREATE TRIGGER if_film_exists BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did'); 兼容性 SQL92 在 SQL92 里没有 CREATE TRIGGER 语句. 上面第二个例子可以使用一个 FOREIGN KEY 约束实现: CREATE TABLE distributors ( did DECIMAL(3), name VARCHAR(40), CONSTRAINT if_film_exists FOREIGN KEY(did) REFERENCES films ON UPDATE CASCADE ON DELETE CASCADE );实例

阅读更多 >>>  pgsql,pgsql判断某字段是否必填

Oracle 中的触发器有几种?

oracle中触发器有三种
1.dml触发器
oracle可以在dml语句进行触发,可以在dml操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。
2
.替代触发器
由于在oracle里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是oracle
8专门为进行视图操作的一种处理方法。
3.
系统触发器
oracle
8i
提供了第三种类型的触发器叫系统触发器。它可以在oracle数据库系统的事件中进行触发,如oracle系统的启动与关闭等。
分为三种:1
DML触发器2
替代触发器3
系统触发器
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更新触发器的写法

创建测试表:
create table bill(id int,status int,aacount varchar2(1));一条测试数据:
insert into bill values (1,49,'N');commit;创建触发器:
create or replace trigger t_update_billbefore insert or update on billfor each rowbegin if :new.status=50 then :new.aacount:='Y'; end if;end;测试1:
将id=1那条数据的status改成50,然后检查结果(请自行测试,我这边验证无误了):
update bill set status=50 where id=1;commit;测试2:
插入一条id=2,status为50,account为N的数据(请自行测试,我这边验证无误了):
insert into bill values (2,50,'N');commit;

oracle中更新触发器怎么写,求指点,谢谢

参考一下:
CREATE OR REPLACE TRIGGER "TRI_TABLE2"
AFTER INSERT OR UPDATE OR DELETE ON TABLE2
FOR EACH ROW
BEGIN
IF UPDATING THEN
update table1 t1 set t1.nianxian = (select t2.zhi from table t2
where 1=1
and t1.dangan = t2.dangan
and t1.bingan = t2.bingan
and t2.fenlei = '0000'
)
where 1=1
and exists (select 1 from table t2
where t1.dangan = t2.dangan
and t1.bingan = t2.bingan
and t2.fenlei = '0000')
;
END IF;
END TRI_TABLE1;
/
你好,触发器如下,经过测试哦!、
创建触发器:
CREATE OR REPLACE TRIGGER TR_UPDATE
AFTER UPDATE ON TABLE2---当修改了TABLE2时触发
FOR EACH ROW
when (OLD.FENLEI='0000')--当tabel2的fenlei值为0000时触发操作
BEGIN
CASE
WHEN UPDATING('ZHI') THEN
UPDATE TABLE1 SET nianxian=:NEW.ZHI WHERE dangan=:OLD.dangan AND bingan=:OLD.bingan;
END CASE;
END;
修改tabel2的数据,即可在table1中看到结果,希望能采取我的答案哦~

阅读更多 >>>  如何定义一个触发器

oracle 自增触发器

SQL> create or replace trigger Use_dectuer 2 before insert on use_Login 3 for each row 4 begin 5 select Use_Login.nextval into :new.use_id from dual; 6 end; 7 /before insert on use_Login *ERROR 位于第 2 行:ORA-02201: 此处不允许序列SQL> SQL> create or replace trigger Use_dectuer 2 before insert on Login 3 for each row 4 begin 5 select Use_Login.nextval into :new.use_id from dual; 6 end; 7 /触发器已创建
1、创建表
create tabletest_user(
user_id number(10,0) primary key,
user_name varchar2(40)
);
2、创建序列
create sequencetest_user_seq start with 1 maxvalue 9999999999 increment by 1;
3、创建触发器
create or replace
triggertest_user_trigger
before insert ontest_user
for each row
begin
selecttest_user_seq.nextval into :new.user_id from dual;
end ;
4、插入数据
insert intotest_user(user_name) values('tom');
insert intotest_user(user_name) values('jack');
5、测试结果
select * from test_user;

oracle更新触发器写法

create or replace trigger tr_a_updateafter update on afor each rowbeginif :new.Status=1 theninsert into b(id,mainid,province,city ,country,sheettype) values(id值,:new.id,:new.province,new.city ,new.country,固定值);end if;end tr_a_update;

如何写一个ORACLE触发器出发插入数据?

A3表,字段t1,t2,t3
A4表,字段t1,t2,t3
以下触发器,功能是:在往A3表插入数据后触发,将刚刚插入的一行的数据插入表A4.
create
or
replace
trigger
t1
after
insert
on
a3
for
each
row
begin
--将刚插入行的字段t1,t2,t3插入表A4中
insert
into
a4
values(:new.t1,:new.t2,:new.t3);
end;

ORACLE INSERT触发器如何写

create or replace trigger abc before insert on ic_purchasein_b for each row when (new.norigtaxprice <> new.ntaxnetprice)begin :new.norigtaxprice := :new.ntaxnetprice; :new.norigprice := :new.nnetprice;end;

网站数据信息

"oracle触发器写法,ORACLE INSERT触发器如何写"浏览人数已经达到23次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:oracle触发器写法,ORACLE INSERT触发器如何写的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!