oracle trigger动态sql,触发器中动态SQL不可以这样么?

如果每次回答问题都要这样做,很累的

5f60efcaccfa40b26873a6a9cb266119.gif

SQL> desc test1;

名称                                      是否为空? 类型

----------------------------------------- -------- ----------------------------

A                                                  NUMBER

SQL> alter table test1 add( b varchar2(20));

表已更改。

已用时间:  00: 00: 00.02

SQL> desc test;

名称                                      是否为空? 类型

----------------------------------------- -------- ----------------------------

A                                                  NUMBER

B                                                  NUMBER

C                                                  NUMBER

SQL> truncate table test1;

表已截掉。

已用时间:  00: 00: 00.01

SQL> alter table test add(d varchar2(20));

表已更改。

已用时间:  00: 00: 00.00

SQL> create or replace trigger mytrigger

2  after insert  on test

3  for each row

4  declare

5  sqlstr varchar2(1000);

6  begin

7  sqlstr := 'insert into test1 values(' ||:new.a||','|| :new.d ||')';

8  execute immediate sqlstr;

9  end  mytrigger;

10  /

触发器已创建

已用时间:  00: 00: 00.00

SQL> insert into test values(1,1,1,'2');

已创建 1 行。

已用时间:  00: 00: 00.00

SQL> commit;

提交完成。

已用时间:  00: 00: 00.00

SQL> select * from test1;

A B

---------- --------------------

1 2

已用时间:  00: 00: 00.00

SQL> insert into test values(2,2,2,'www');

insert into test values(2,2,2,'www')

*

ERROR 位于第 1 行:

ORA-00984: 列在此处不允许

ORA-06512: 在"RAINY.MYTRIGGER", line 5

ORA-04088: 触发器 'RAINY.MYTRIGGER' 执行过程中出错

已用时间:  00: 00: 00.01

SQL> create or replace trigger mytrigger

2  after insert  on test

3  for each row

4  declare

5  sqlstr varchar2(1000);

6  begin

7  sqlstr := 'insert into test1 values(' ||:new.a||','''|| :new.d ||''')';

8  execute immediate sqlstr;

9  end  mytrigger;

10  /

触发器已创建

已用时间:  00: 00: 00.00

SQL>  insert into test values(2,2,2,'www');

已创建 1 行。

已用时间:  00: 00: 00.00

SQL> commit;

提交完成。

已用时间:  00: 00: 00.00

SQL> select  * from test1;

A B

---------- --------------------

1 2

2 www

已用时间:  00: 00: 00.00

SQL>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值