您的位置:首页 > 数据库

PLSQL中 EXECUTE IMMEDIATE语句(带有语法)

2014-05-04 00:01 134 查看
PLSQL中 EXECUTE IMMEDIATE语句

  

    先说说绑定变量

   ":"称绑定变量指示符,解释如下:

   它是用户放入查询中的占位符,它会告诉Oracle" 现在生成一个方案框架,实际执

   行语句的时候,会提供应该使用的实际值"。

   例子如下:

   select * from emp where dep='sale'; //不使用绑定变量

   select * from emp where dep=:sale //使用绑定变量

   一般在 procedure or function 中使用,可以优化共享池的使用。

    两句的区别很明显,后者多一个占位符,这个以冒号开始的变量可以灵活地执行不

   同条件的where语句,这是动态SQL语句。

  1、 语法:

  

    EXECUTE IMMEDIATE dynamic_string

    [INTO {define_variable[,define_variable]…| record}]

    [USING [IN | OUT | IN OUT] bind_argument[,[IN | OUT \ IN OUT] bind_argumnet]…]

    [{RETURNING | RETURN} INTO bind_argument[,bind_argument]…];

  2、 用法

    处理DDL操作(CREATE,ALTER,DROP)

    CREATE OR REPLACE PROCEDURE drop_table(table_name VARCHAR2)

    IS

     Sql_statemet VARCHAR2(100);

    BEGIN

     Sql_statement:=’DROP TABLE’ || table_name;

     EXECUTE IMMEDIATE sql_statement;

    END;

    /

    建立过程drop_table后,调用如下:

    SQL> exec drop_table(‘worker’)

    处理DCL操作(GRANT REVOKE)

    SQL> conn system/manager

    CREATE OR REPLACE PROCEDURE grant_sys_priv(priv VARCHAR2,username VARCHAR2)

    IS

     Sql_stat VARCHAR2(100);

    BEGIN

     Sql_stat:=’GRANT “ || priv|| ’ TO ’|| username;

    EXECUTE IMMEDIATE sql_stat;

    END;

    /

    调用

    SQL> exec grant_sys_priv(‘CREATE SESSION’,’SCOTT’)

    处理DML操作(INSERT UPDATE DELETE)

    如果DML语句带有占位符,那么在E I语句中则要带USING子句

    如果DML语句带有RETURNING子句,那么E I语句中要带有RETURNINGINTO子句

    例子,处理单行查询:

    DECLARE

     sql_stat VARCHAR2(100);

     emp_record tbl%ROWTYPE;

    BEGIN

     sql-stat:='SELECT * FROM tbl WHERE tblno=:no';

     EXECUTE IMMEDIATE sql_stat INTO emp_record USING &1;

     dbms_output.put_line(emp_record.ename||emp_record.sal);

    END;

    /
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: