这个Oracle动态查询错在了哪里

yux007 2009-07-14 11:17:50
想实现的效果是 select * from aaa_test

declare
   l_cmd  varchar2(100) := 'select * from ';
   l_tblnam  varchar2(20) := 'aaa_test';
v_sql varchar2(500);
   begin

v_sql:= l_cmd || l_tblnam || ' ;';

dbms_output.put_line(v_sql);
   execute immediate v_sql;
end;



...全文
98 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yux007 2009-07-14
改好了
DECLARE
l_cmd varchar2(100);
l_tblnam varchar2(20);
v_sql varchar2(500);
v_out varchar2(100);
BEGIN
l_cmd:='select * from ';
l_tblnam:='aaa_test';
v_sql:=l_cmd||l_tblnam;
dbms_output.put_line(v_sql);
execute immediate V_SQL into v_out;
END;
回复
suncrafted 2009-07-14
帮顶了
回复
fosjos 2009-07-14
如果是初学,那就先学习一下存储过程里怎么调用静态的sql
回复
yux007 2009-07-14
麻烦给个可以直接运行的语句,初学oracle,见笑
回复
yux007 2009-07-14
[Quote=引用 6 楼 ldw2545398 的回复:]
DECLARE
l_cmd varchar2(100);
l_tblnam varchar2(20);
v_sql varchar2(500);
BEGIN
l_cmd:='select * from ';
l_tblnam:='code_area';
v_sql:=l_cmd||l_tblnam||';';
dbms_output.put_line(v_sql);
execute immediate V_SQL into xxx;
END;
DECLARE 声明,在BEGIN里赋值
[/Quote]

我这样改了一下:
DECLARE
l_cmd varchar2(100);
l_tblnam varchar2(20);
v_sql varchar2(500);
v_out varchar2(100);
BEGIN
l_cmd:='select * from ';
l_tblnam:='aaa_test';
v_sql:=l_cmd||l_tblnam||';';
dbms_output.put_line(v_sql);
execute immediate V_SQL into v_out;
END;
执行报错:无效字符
回复
ldw2545398 2009-07-14
DECLARE
l_cmd varchar2(100);
l_tblnam varchar2(20);
v_sql varchar2(500);
BEGIN
l_cmd:='select * from ';
l_tblnam:='code_area';
v_sql:=l_cmd||l_tblnam||';';
dbms_output.put_line(v_sql);
execute immediate V_SQL into xxx;
END;
DECLARE 声明,在BEGIN里赋值
回复
yux007 2009-07-14
[Quote=引用 4 楼 hotyxm 的回复:]
楼上二位高手的答案正确。
[/Quote]
还是不行啊...
回复
hotyxm 2009-07-14
楼上二位高手的答案正确。
回复
yux007 2009-07-14
为什么这样还不行呢:
declare
   l_cmd  varchar2(100) := 'select * from ';
   l_tblnam  varchar2(20) := 'aaa_test';
v_sql varchar2(500);
v_out varchar2(100);
begin
v_sql:= l_cmd || l_tblnam || ';';
dbms_output.put_line(v_sql);
   execute immediate v_sql into v_out;
end;
回复
fosjos 2009-07-14
[Quote=引用 1 楼 mantisXF 的回复:]
必须要有个"对象"接收V_SQL返回的结果集
[/Quote]
execute immediate v_sql into xxx;
或者for cursor_ in v_sql loop ... end loop;
回复
mantisXF 2009-07-14
必须要有个"对象"接收V_SQL返回的结果集[Quote=引用楼主 yux007 的帖子:]
想实现的效果是 select * from aaa_test

declare
   l_cmd  varchar2(100) := 'select * from ';
   l_tblnam  varchar2(20) := 'aaa_test';
v_sql varchar2(500);
   begin

v_sql:= l_cmd || l_tblnam || ' ;';

dbms_output.put_line(v_sql);
   execute immediate v_sql
end;
[/Quote]
回复
相关推荐
发帖
基础和管理
创建于2007-09-28

1.7w+

社区成员

Oracle 基础和管理
申请成为版主
帖子事件
创建了帖子
2009-07-14 11:17
社区公告
暂无公告