execute immediate使用变量拼接字符串

SQL Server admin 28℃ 0评论

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=1942

 

执行动态sql语句,如果要使用变量拼接字符串,这样写。

1

  1. <span style=”font-size:14px; font-family: Arial, Helvetica, sans-serif;”></span><p><strong style=”font-family: ‘Microsoft YaHei'; font-size: 12px; background-color: rgb(255, 255, 255);”></strong></p>

简单来说 就是你一个存储过程当中 创建了一个表 table_a 然后要用insert into将其他的数据插入到这个table_a当中,但是因为你在创建过程的时候 table_a还不存在,过程就会显示有编译错误,因为table_a不存在必然导致过程无法执行,所以无法编译成功,而把insert into语句加如到 execute immediate之后 则oracle不会再去理会这个对象是否存在,因此可以成功编译和执行。

[sql] view plain copy

  1. <span style=”font-size:14px; font-family: Arial, Helvetica, sans-serif;”></span><pre name=”code”class=”sql” style=”font-size:18px; display: inline !important;”><span style=”font-size:14px; font-family: Arial, Helvetica, sans-serif;”></span>

[sql] view plain copy

  1. <span style=”font-family: Arial, Helvetica, sans-serif;”><span style=”font-size:14px;”>SQL> BEGIN</span></span>

[sql] view plain copy

  1. <span style=”font-size:14px;”>2  EXECUTEIMMEDIATE ( ‘SELECT * FROM test_dysql WHERE id=1′ );
  2. END;
  3. 4 /
  4. PL/SQL proceduresuccessfully completed. </span>

execute immediate  是用于在 存储过程里面.  动态的执行 SQL 语句。

例如:

有个存储过程, 用于检索表的行数。  传入的参数是 表的名称。

这种情况下,你

SELECT count(*) FROM  v_变量

是无法执行的。

 

你只能定义一个变量  vsql  varchar2(100);

然后

vsql = ‘SELECT count(*) FROM ‘  ||   v_变量

然后调用  EXECUTE IMMEDIATE   来执行。

 

动态SQL,意思就是你需要执行的 SQL 语句, 不是固定的。要等运行的时候, 才能确定下来。

也就像上面那个例子,表名是 外部传入的。

不过 动态SQL 与 EXECUTE IMMEDIATE  主要用在 存储过程里面。

其他:

EXECUTE IMMEDIATE ‘select * from xxx_’||to_char(SYSDATE,’mm’)||';’

比如

v_sql:=’insert into tmp_table as select * from ‘||v_table;

EXECUTE IMMEDIATE v_sql;

这里的v_table这个变量就是不确定的表名

[sql] view plain copy

  1. <span style=”font-size:14px;”>createor replace procedure test_proc
  2. as
  3. begin
  4. execute immediate ‘
  5. create global temporary table T_AB    as
  6. select
  7. id_,
  8. name_,
  9. num_
  10. from
  11. T_A A,
  12. T_B B
  13. where
  14. id_=B.id_';
  15. end;</span>

 

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=1942

转载请注明:森大科技官方博客 » execute immediate使用变量拼接字符串

喜欢 (1)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址