在存储过程里“execute immediate v_sql”与直接使用sql有什“execute immediate v_sql”与直接使用sql有什么区别?

adixia 2010-03-31 03:02:34
execute immediate v_sql的例子:
begin
v_sql := 'select channel_id from imp_sh_cms_channel where wg_code =' ||
in_wg_id;
execute immediate v_sql
into v_contentid;
exception
when no_data_found then
out_result := 1; -- can't find data in imp_sh_cms_channel
rollback;
return;
end;


直接使用sql的例子:
begin
select channel_id into v_contentid from imp_sh_cms_channel where wg_code=in_wg_id;
exception
when no_data_found then
out_result := 1; -- can't find data in imp_sh_cms_channel
rollback;
return;
end;
...全文
356 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
codearts 2010-04-07
  • 打赏
  • 举报
回复
执行的SQL:

--每一个值不一样,SQL语句也不一样。也有可能导致执行计划不一样
select channel_id from imp_sh_cms_channel where wg_code = '123';
select channel_id from imp_sh_cms_channel where wg_code = '456';

--这是使用绑定变量
select channel_id from imp_sh_cms_channel where wg_code = :code;

google一下:绑定变量

http://www.google.com.hk/search?hl=zh-CN&source=hp&q=%E7%BB%91%E5%AE%9A%E5%8F%98%E9%87%8F&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=
adixia 2010-04-07
  • 打赏
  • 举报
回复
只能上CSDN,不能其他外网
悲哀啊
adixia 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 codearts 的回复:]
第一种动态执行,不使用绑定变量的;第二种则使用绑定变量
[/Quote]

绑定变量怎么理解,请大虾多多指教
fxianxian 2010-03-31
  • 打赏
  • 举报
回复
你只传入一个值的话,效率上基本没什么区别
另外用动态SQL的另一种情况就是在programme中执行DDL语句
codearts 2010-03-31
  • 打赏
  • 举报
回复
第一种动态执行,不使用绑定变量的;第二种则使用绑定变量
adixia 2010-03-31
  • 打赏
  • 举报
回复
效率上有不同吗?
suiziguo 2010-03-31
  • 打赏
  • 举报
回复
此例没必要用动态SQL。


动态SQL是指SQL文不确定时,不同条件下,拼接出不同SQL文。

fxianxian 2010-03-31
  • 打赏
  • 举报
回复
就单纯的你这个例子来说
两者返回的结果是一样的,想你这样情况就没有必要用动态SQL

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧