嗨有没有办法在from子句中使用PL sql变量? 我正在使用下面的代码,但我在选择语句中收到“表未找到”
的错误declare
--var varchar2(20);
cursor cur is
select table_name from my_tables where table_name like 'RATED%';
v_rows cur%rowtype;
--V_name varchar2(20);
begin
open cur;
loop
fetch cur into v_rows;
exit when cur%NOTFOUND;
select * from v_rows.table_name; --here i am getting error.
end loop;
end;
答案 0 :(得分:0)
您可以使用动态sql:
excute immediate 'select * from ' || v_rows.table_name;
请查看execute immediate
和DBMS_SQL
的{{3}}以了解动态sql。
要从此类查询中获取结果,您必须使用显式游标(也在上述说明中进行了解释)。
答案 1 :(得分:0)
不,这是不可能的。您不能将变量用作表或模式名称。 您必须使用本机动态SQL或DBMS_SQL。
另外,你不能在PL / SQL中使用普通的'SELECT * from v_rows.table_name' - 你需要一个INTO子句(一个“目标”,你可以放置SELECT的结果)。
这是一个让你走上正确轨道的例子:
create table my_tables as select table_name as table_name from user_tables;
declare
cursor cur is
select table_name
from my_tables
where table_name like 'RATED%';
v_rows cur%rowtype;
v_cnt pls_integer;
v_SQL varchar2(4000);
begin
open cur;
loop
fetch cur into v_rows;
exit when cur%NOTFOUND;
v_SQL := 'select count(*) from ' || v_rows.table_name;
-- debug output
dbms_output.put_line(v_SQL);
EXECUTE IMMEDIATE v_SQL INTO v_cnt;
dbms_output.put_line(v_rows.table_name || ' : ' || v_cnt);
end loop;
end;