execute immediate 的使用

动态SQL:不是在Designer  Time写的SQL, 而是可以在运行时临时拼接起来的SQL语句; 
动态SQL可以使用Oracle 内置包 DBMS_SQL 来执行,也可以使用EXECUTE IMMEDIATE  语句来执行:


用dbms——sql执行的例子:

CREATE OR REPLACE PROCEDURE delete_all_rows    (p_tab_name IN VARCHAR2, p_rows_del OUT NUMBER)          IS

    cursor_name   INTEGER; 

BEGIN    cursor_name := DBMS_SQL.OPEN_CURSOR;  

  DBMS_SQL.PARSE(cursor_name, 'DELETE FROM '||p_tab_name,  

  DBMS_SQL.NATIVE );    p_rows_del := DBMS_SQL.EXECUTE (cursor_name);   

  DBMS_SQL.CLOSE_CURSOR(cursor_name);

END;


用execute immediate执行的例子:

CREATE PROCEDURE del_rows   (p_table_name  IN  VARCHAR2,    p_rows_deld   OUT NUMBER) IS

BEGIN   EXECUTE IMMEDIATE 'delete from '||p_table_name;  

   p_rows_deld := SQL%ROWCOUNT;

END;


另外,在存储过程中新建的表,比如是table_a,如果想要在其中进行操作的话,因为在创建存储过程的时候,表还不存在,所以就会报错。过程就会显示有编译错误,因为table_a不存在必然导致过程无法执行,所以无法编译成功,而把insert into语句加如到 execute immediate之后 则oracle不会再去理会这个对象是否存在,因此可以成功编译和执行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值