execute immediate的奇怪问题

[复制链接]
查看11 | 回复7 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
目的:用system用户登陆数据,将用户A下表T1中的数据,导入到用户B下的表T2中
做法:这里用户A和B不确定,通过参数传入,动态构造sql语句,最后用execute immediate执行
user_Avarchar2(30);
User_Bvarchar2(30);
insertsql varchar2(32000);
user_A:='U1';
user_B:='U2';
insertsql:='insert into '||user_A||'.T1 (F1,F2,F3) '||

' Select F1,F2,F3 From '||User_B||'.T2 ';
execute immediate insertsql;
-----------------------------------
结果提示ora-00942:表或视图不存在,但是将上面动态组成的
sql "insert into u1.t1(F1,F2,F3) select F1,F3,F3 from u2.T2"直接在
system用户下执行确可以成功,这是为什么?
怎么才能动态执行上面动态组成的sql ?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
是不是不能在表名前加用户名?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
你先用dbms_output.put_line(insertsql)将insertsql显示出来,然后用sqlplus用system登录进去执行一下insertsql,看看是什么错。从错误来看,应该是user_A或user_B有问题。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
Probably it's because you have a typo in the code:
execute immedate insertsql;
should be:
execute immediate insertsql;
notice the word "immediate".
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
to robin :
dbms_output.put_line(insertsql)打印出来的语句可以成功执行
tohgeng:
是我打字打错了,上面的pl/sql块可以编译成功的,就是执行的时候出错
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
有其他的执行动态sql的方法吗?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
有可能是权限问题。
试试看grant select any table , insert any table to system
最初由 greenapple 发布
[B]目的:用system用户登陆数据,将用户A下表T1中的数据,导入到用户B下的表T2中
做法:这里用户A和B不确定,通过参数传入,动态构造sql语句,最后用execute immediate执行
user_Avarchar2(30);
User_Bvarchar2(30);
insertsql varchar2(32000);
user_A:='U1';
user_B:='U2';
insertsql:='insert into '||user_A||'.T1 (F1,F2,F3) '||

' Select F1,F2,F3 From '||User_B||'.T2 ';
execute immediate insertsql;
-----------------------------------
结果提示ora-00942:表或视图不存在,但是将上面动态组成的
sql "insert into u1.t1(F1,F2,F3) select F1,F3,F3 from u2.T2"直接在
system用户下执行确可以成功,这是为什么?
怎么才能动态执行上面动态组成的sql ? [/B]

回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
用rollingpig的方法可以了 ^_^
原来只是给system赋了dba的角色,结果还是权限问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行