问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

PL/SQL里 execute immediate的用法 谁给解释下

发布网友 发布时间:2022-05-02 18:47

我来回答

1个回答

热心网友 时间:2022-05-03 11:11

在ORACLE的PL/SQL里:
EXECUTE
IMMEDIATE
代替了以前Oracle8i中DBMS_SQL
package包.
它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTE
IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE
IMMEDIATE,因为它获的收益在包之上。
--
使用技巧
1.
EXECUTE
IMMEDIATE将不会提交一个DML事务执行,应该显式提交
如果通过EXECUTE
IMMEDIATE处理DML命令,
那么在完成以前需要显式提交或者作为EXECUTE
IMMEDIATE自己的一部分.
如果通过EXECUTE
IMMEDIATE处理DDL命令,它提交所有以前改变的数据
2.
不支持返回多行的查询,这种交互将用临时表来存储记录(参照例子如下)或者用REF
cursors.
3.
当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号.
4.
在Oracle手册中,未详细覆盖这些功能。
下面的例子展示了所有用到Execute
immediate的可能方面.希望能给你带来方便.
5.
对于Forms开发者,当在PL/SQL
8.0.6.3.版本中,Forms
6i不能使用此功能.
EXECUTE
IMMEDIATE
--
用法例子
1.
在PL/SQL运行DDL语句
begin
execute
immediate
'set
role
all';
end;
2.
给动态语句传值(USING
子句)
declare
l_depnam
varchar2(20)
:=
'testing';
l_loc
varchar2(10)
:=
'Du';
begin
execute
immediate
'insert
into
dept
values
(:1,
:2,
:3)'
using
50,
l_depnam,
l_loc;
commit;
end;
3.
从动态语句检索值(INTO子句)
declare
l_cnt
varchar2(20);
begin
execute
immediate
'select
count(1)
from
emp'
into
l_cnt;
dbms_output.put_line(l_cnt);
end;
4.
动态调用例程.例程中用到的绑定变量参数必须指定参数类型.
黓认为IN类型,其它类型必须显式指定
declare
l_routin
varchar2(100)
:=
'gen2161.get_rowcnt';
l_tblnam
varchar2(20)
:=
'emp';
l_cnt
number;
l_status
varchar2(200);
begin
execute
immediate
'begin
'
||
l_routin
||
'(:2,
:3,
:4);
end;'
using
in
l_tblnam,
out
l_cnt,
in
out
l_status;
if
l_status
!=
'OK'
then
dbms_output.put_line('error');
end
if;
end;
5.
将返回值传递到PL/SQL记录类型;同样也可用%rowtype变量
declare
type
empdtlrec
is
record
(empno
number(4),
ename
varchar2(20),
deptno
number(2));
empdtl
empdtlrec;
begin
execute
immediate
'select
empno,
ename,
deptno
'
||
'from
emp
where
empno
=
7934'
into
empdtl;
end;
6.
传递并检索值.INTO子句用在USING子句前
declare
l_dept
pls_integer
:=
20;
l_nam
varchar2(20);
l_loc
varchar2(20);
begin
execute
immediate
'select
dname,
loc
from
dept
where
deptno
=
:1'
into
l_nam,
l_loc
using
l_dept
;
end;
7.
多行查询选项.对此选项用insert语句填充临时表,
用临时表进行进一步的处理,也可以用REF
cursors纠正此缺憾.
declare
l_sal
pls_integer
:=
2000;
begin
execute
immediate
'insert
into
temp(empno,
ename)
'
||
'
select
empno,
ename
from
emp
'
||
'
where
sal
>
:1'
using
l_sal;
commit;
end;
对于处理动态语句,EXECUTE
IMMEDIATE
比以前可能用到的更容易并且更高效.
当意图执行动态语句时,适当地处理异常更加重要.应该关注于捕获所有可能的异常.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Request对象语法 9,django中request对象 塞尔达传说时之笛火之神殿Boss房间怎么去 ...的圆形地方怎么上去?打完BOSS后才发现没去过,但我 榆中兴隆山旅游路线 ...兴隆山校区到哪个公交车站最近?应该怎么乘公交车?打车的话得多少钱... 从般若寺到兴隆山法院怎么坐公交车,最快需要多久 那些属于国有经济,哪些属于集体经济 ...丢手机,生病,丢工作,怎么转运啊,谁能告诉我,我快疯了 阴历十月又叫什么月 oracle 存储过程Execute Immediate oracle 9i execute 命令如何cmd执行 oracle参数绑定是否需要使用"execute immediate" oracle execute immediate 求大手解释 Oracle EXECUTE IMMEDIATE uing 什么意思 oracle 使用execute 需要什么权限 oracle 中execute immediate 是什么意思? 能不能 用白话说一下?_百度... 在oracle中,动态语句execute immediate,我写了一句怎么改都是错的... Oracle中“execute immediate”是什么意思? oracle中EXECUTE IMMEDIATE是什么意思?如何使用,请用自己理解的语言,通 ... oracle中 EXECUTE IMMEDIATE的作用是什么,怎样用的呢? oracle时间函数的问题!把123426秒转化为:34:17:06 这样的格式,即 00(时):00(分):00(秒)格式。求函数。 CK的香水谁用过?女士的好用吗?- 请问如何CK的香水是男用的还是女用的呢? ck女士香水哪款好闻 ck香水介绍(主要指品种)20分+ ck女士香水 行吗 ck香水哪个系列适合21岁女孩 ck 香水 怎么样?留香时间长么 ck女士香水 用过的请指点 oracle 存储过程里用 execute immedate 动态sql,更新一个表的clob字段... oracle中在使用execute immediate 报009900错误 sql如下 怎样打开英特尔睿频加快技术 如何打开Intel的睿频 英特尔H55主板BIOS怎么开启睿频i5660 Cpu睿频加速这个驱动怎么设置,求指教,这两个参数怎么调 Cpu睿频加速这个驱动怎么设置,求指教,这两个参数怎么调 CPU英特尔睿频怎么开启?英特尔睿频监控软件在哪里 三星Q460笔记本,cpu-i5,睿频加速如何开启? 三星Q460笔记本,cpu-i5,睿频加速如何开启? 华硕P8Z77-V LK搭配Intel 酷睿i7 3770K,如何设置主板BIOS开启睿频? 华硕P8Z77-V LK搭配Intel 酷睿i7 3770K,如何设置主板BIOS开启睿频? Intel i7的睿频技术怎么开启? Intel i7的睿频技术怎么开启? 教你如何查看intel CPU睿频加速频率-intel睿频加速监控程序 教你如何查看intel CPU睿频加速频率-intel睿频加速监控程序 烦人的秋风的含义是什么 风呀风呀请你给我一个说明是哪首歌? 情人把我电话拉黑很多次,,又拉出来,,这次是真的不会再拉出来了,,我该怎么办 那首歌的歌词有“为什么”