INSERT INTO DWD_LOANS_HIS
      SELECT *
      FROM DWD_LOANS;
    COMMIT;
    EXECUTE IMMEDIATE 'TRUNCATE TABLE DWD_LOANS';我对execute immediate  有些问题,查了下是动态执行,但我不太清楚这哪里动态执行了
 2)为何有truncate  table

解决方案 »

  1.   

    1.execute immediate后面跟着的是一个字符串,这就是动态执行。
    就本题来说,如果sql不是动态拼出来的话,是没有必要动态执行的。
    直接使用TRUNCATE TABLE DWD_LOANS就行。
    2.为何有truncate  table:直接删除表中全部数据,直接提交,无法回滚。整个sql意思:将DWD_LOANS中数据插入到DWD_LOANS_HIS中,再删除DWD_LOANS中的数据。
      

  2.   


    请问什么是动态品出来的? DECLARE
       V_TABLE TABLETYPE;BEGIN
    SELECT * FROM V_TABLE;END ;
    是这样吗,那可以不加immdiate 么,有什么区别?
    2)是不是truncate 那句话就不用加immdiate了?
      

  3.   


    请问什么是动态品出来的? DECLARE
       V_TABLE TABLETYPE;BEGIN
    SELECT * FROM V_TABLE;END ;
    是这样吗,那可以不加immdiate 么,有什么区别?
    2)是不是truncate 那句话就不用加immdiate了?
    1.oracle语法还要加强啊,动态拼出来的就是,动态拼出来的sql字符串啊,字符串和命令语句应该能分清吧
    2.EXECUTE IMMEDIATE都不用加
      

  4.   


    请问什么是动态品出来的? DECLARE
       V_TABLE TABLETYPE;BEGIN
    SELECT * FROM V_TABLE;END ;
    是这样吗,那可以不加immdiate 么,有什么区别?
    2)是不是truncate 那句话就不用加immdiate了?
    1.oracle语法还要加强啊,动态拼出来的就是,动态拼出来的sql字符串啊,字符串和命令语句应该能分清吧
    2.EXECUTE IMMEDIATE都不用加
    谢谢了!! 
      

  5.   


    请问什么是动态品出来的? DECLARE
       V_TABLE TABLETYPE;BEGIN
    SELECT * FROM V_TABLE;END ;
    是这样吗,那可以不加immdiate 么,有什么区别?
    2)是不是truncate 那句话就不用加immdiate了?
    1.oracle语法还要加强啊,动态拼出来的就是,动态拼出来的sql字符串啊,字符串和命令语句应该能分清吧
    2.EXECUTE IMMEDIATE都不用加
    谢谢了!! 
    那加exe imm... 和不加,性能有区别吗,就是说,加上imm会不会性能反而下降?
      

  6.   


    请问什么是动态品出来的? DECLARE
       V_TABLE TABLETYPE;BEGIN
    SELECT * FROM V_TABLE;END ;
    是这样吗,那可以不加immdiate 么,有什么区别?
    2)是不是truncate 那句话就不用加immdiate了?
    1.oracle语法还要加强啊,动态拼出来的就是,动态拼出来的sql字符串啊,字符串和命令语句应该能分清吧
    2.EXECUTE IMMEDIATE都不用加
    谢谢了!! 
    那加exe imm... 和不加,性能有区别吗,就是说,加上imm会不会性能反而下降?
    我们使用execute immediate  只有在存储过程中,大批量更新数据时候才会使用,据说是能提升效率,具体是否能够提升没有验证过,像你这种DDL语句,直接写就可以吧,用不着加上execute immediate,个人观点。
      

  7.   

    INSERT INTO DWD_LOANS_HIS
           SELECT *
           FROM DWD_LOANS;
         COMMIT;
         EXECUTE IMMEDIATE 'TRUNCATE TABLE DWD_LOANS';
    首先,查询DWD_LOANS表中所有的记录,然后插入到DWD_LOANS_HIS表中,commit提交,最后执行删除DWD_LOANS表中的所有记录的DDL语句。
      

  8.   

    动态语句就是 执行语句可以动态的拼接起来的。在频繁查询的SQL中结合绑定变量来使用.性能上会提高不少(涉及到软解析和硬解析)
      

  9.   

    truncate是数据定义语言的一种,它可以单独在sql窗口中执行,但不能在pl/sql块和存储过程中执行,要想实现在pl/sql块和存储过程中执行数据定义语言,就执行用动态语句了。