动态执行sql语句

execute immediate 语法

后面跟上sql语句可以动态执行sql语句.

使用场景:

(1)加入动态表.比如你有一张表的名字不明确,是需要判断得到的,则可以使用该语法来生成sql语句.

(2)加入动态字段.你根据判断,最终会加入同一张表,但是这张表根据不同的判断字段会有所不同,此时如果直接写sql是加不进去的,必须使用动态sql语句,让oracle编译时不判断字段是否与表匹配,这样的话才能动态加入字段.

例:

execute immediate 'insert into po_p_downloaddesc_' || table_languages(1) || '( contentid ) values(''' || s_contentid || ''')';

 

PS:要注意的地方.

(1)加入字段时,生成以后的sql语句要与非动态sql语句一模一样,也就是说,如果sql语句中有''的,那么在动态中也必须拼接''.

例如:

静态sql:insert into page values('123');

动态sql:execute immediate 'insert into page values('  ''123'' )';

中间俩个''123''最后生成'123'.语静态一样才可以插入,不然报错.

 

复合表类型如果是建一个类型的话

create or replace type type_table is table of varchar2(100);

那么在存储过程或函数或程序块中调用时必须初始化.

declare

  table_languages type_table := type_table();

begin

  table_languages.extend(2);

  --上面为复合表table_languages申明了2个空间,这样只有1和2可以用,3的话就会抛出越界

end;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值