请问如何让表名使用variable

[复制链接]
查看11 | 回复4 | 2007-7-4 17:27:50 | 显示全部楼层 |阅读模式
我写了一个但是PL/SQL:
declare
num number(10);
tablename char(10);
cursor name is
select tname from tab where tname like 'abc%';
begin
open name;
fetch name into tablename;
loop
exit when name%NOTFOUND;
select count(*) into num from :tablename a, abc_table b where a.number = b.number;
end loop;
end;
我执行的时候为什么总是说我的:tablename写的不对,他不认我的:tablename是一个variable,请问应该怎么用啊?
谢谢。
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
我觉的需要用到动态SQL吧
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
用楼上的方法试
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
正确使用如下:

declare
num number(10);
tablename char(10);
cursor name is
select tname from tab where tname like 'abc%';
begin
open name;
loop
fetch name into tablename;
exit when name%NOTFOUND;
EXECUTE IMMEDIATE 'select count(*) into num from '||tablename ||' a ' || ', abc_table b where a.number = b.number';
end loop;
end;
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
谢谢楼上的,我试了一下修改后的程序,虽然不报错了,可是那个num的值还是不对,如果把num提出来就对啦,所以正确方法如下:
ideclare
num number(10);
tablename char(10);
cursor name is
select tname from tab where tname like 'abc%';
begin
open name;
loop
fetch name into tablename;
exit when name%NOTFOUND;
EXECUTE IMMEDIATE 'select count(*) from ' || tablename || ' a ' || ', abc_table b where a.number = b.number' into num;
end loop;
end;
这个好像8i以后的功能,oracle 8不支持。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行