这个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;



...全文
177 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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]
还是不行啊...
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;
hotyxm 2009-07-14
  • 打赏
  • 举报
回复
楼上二位高手的答案正确。
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]

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧