commit提醒 plsql_plsql中的commit immediate

PLSQL中 EXECUTE IMMEDIATE语句

先说说绑定变量

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

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

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

例子如下:

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

select * from

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

一般在 procedure or function

中使用,可以优化共享池的使用。

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

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

commit immediate  这是动态语句的执行方法。

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

bing_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;

/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值