永发信息网

在oracle中,动态语句execute immediate,我写了一句怎么改都是错的,应该是符号

答案:1  悬赏:10  手机版
解决时间 2021-02-20 15:21
在oracle中,动态语句execute immediate,我写了一句怎么改都是错的,应该是符号不对,帮我看一下。
EXECUTE IMMEDIATE 'ALTER TABLE EMP LOCATION("ODSDIR_PAECIF":'EMP_NEW1.TXT')';
应该是引号什么的,一直都有浪线提示错误,新手求帮助谢谢。
最佳答案
-- 使用技巧

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) := 'Dubai';
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;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
烧杯的主要用途是:()。
爸妈我能为什么做点什么6oo字作文,我们要为
我没有会计基础的,但是想自学,学做账。平时
澄海潮商村镇银行盐鸿分理处地址在什么地方,
为什么没有陕西区, 这么多大区为什么没有陕呢
杭州半岛网络科技有限公司在哪里啊,我有事要
开网店上传的宝贝图是怎样得来的如何弄
我发现了:加法算式中,和不变时,一个加数()
邮政银行存的定期带国华人寿万能险,不到期,
名盟灯饰我想知道这个在什么地方
整体橱柜是什么意思
武汉市新洲区个人社保查询
一段时间运动后血糖各项指标都正常了还会反弹
诚信电脑在哪里啊,我有事要去这个地方
求推荐好用的小额贷款
推荐资讯
哈勃空间望远镜怎么拍到 1万光年远的照片的,
中国邮政储蓄银行手机客户端如何更换手机号
微信好友加我忽略了验证消息怎样找回
一米电话手表无法打开电话簿怎么回事
优城悦客博罗店地址在什么地方,想过去办事
什么银行卡前5位是和后面分开的
请问定期自动续存利息是按最新的利自算还是按
矢野志保的日语介绍
马克思说:“封建国家可以指挥千千万万人的手
农家铁锅菜在什么地方啊,我要过去处理事情
瓦塘乡民心药店怎么去啊,有知道地址的么
舍己为人的四字词语
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?