oracle trigger动态sql,Oracle触发器调用存储过程示例

--创建测试表B_TEST_TABLE,稍后会在本表上增加触发器,在插入本表的同时复制一份数据到B_TEST_TABLE2中

create table B_TEST_TABLE

(

c1 VARCHAR2(200),

d2 DATE

);

--创建B_TEST_TABLE2表,在插入B_TEST_TABLE数据时,复制一份数据到本表中

create table B_TEST_TABLE2

(

c1 VARCHAR2(200),

d2 DATE

);

--创建存储过程,往B_TEST_TABLE2中插入一条数据

create or replace procedure TestPro(C1 VARCHAR2) is

begin

INSERT INTO B_TEST_TABLE2 VALUES (C1, SYSDATE);

--因为此存储过程是触发器中调用的,所以不能增加提交命令

--COMMIT;

end TestPro;

--下面这个斜杠不能去掉,否则会导致触发器和存储过程或其他脚本编译在同一个对象中,每个单独的对象都应用此符号分开(建表等操作除外)

/

--创建触发器,before insert on b_test_table为在插入b_test_table数据之前触发,可以改成after insert on b_test_table

--或者before update on b_test_table等选项

create or replace trigger TEST_TABLE_TRIGGER_INST_BF

before insert on b_test_table

for each row

begin

--调用存储过程:new代表的是新的记录对象,可以直接取值或修改该记录的每一列,:new.c1是取新纪录的c1列值,:new.d2是取新纪录的d2列值

TestPro(:new.c1);

--如果不想用存储过程也可以直接这样写

--INSERT INTO B_TEST_TABLE2 VALUES (:new.c1, :new.d2);

end TEST_TABLE_TRIGGER_INST_BF;

/

--插入测试数据

insert into B_TEST_TABLE values ('1', sysdate);

commit;

--查询测试表数据

select * from B_TEST_TABLE;

select * from B_TEST_TABLE2;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值