• execute immediate使用变量拼接字符串


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

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

    1. <span style="font-size:14px; font-family: Arial, Helvetica, sans-serif;"></span><p><strong style="font-family: 'Microsoft YaHei'; font-size: 12px; "></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  EXECUTE IMMEDIATE ( 'SELECT * FROM test_dysql WHERE id=1' );  
    2. END;  
    3. 4 /  
    4. PL/SQL procedure successfully 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;">create or replace procedure test_proc  
    2. as  
    3. begin  
    4.     execute immediate '  
    5.     create global temporary table T_AB    as   
    6.     select   
    7.         A.id_,   
    8.         A.name_,   
    9.         B.num_  
    10. 10.     from   
    11. 11.         T_A A,   
    12. 12.         T_B B   
    13. 13.     where   
    14. 14.         A.id_=B.id_';  

    end;</span> 

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

  • 相关阅读:
    UNIX环境高级编程——System V 共享内存区
    UNIX环境高级编程——system V消息队列
    UNIX环境高级编程——进程间通讯方法整理
    UNIX环境高级编程——system V信号量
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/cnsend/p/15369758.html
Copyright © 2020-2023  润新知