Oracle 有没有办法在“FROM”子句中使用PLSQL变量?
嗨,有没有办法在from子句中使用PL sql变量? 我正在使用下面的代码,但我在select语句中发现了找不到该表的错误Oracle 有没有办法在“FROM”子句中使用PLSQL变量?,oracle,plsql,Oracle,Plsql,嗨,有没有办法在from子句中使用PL sql变量? 我正在使用下面的代码,但我在select语句中发现了找不到该表的错误 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
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;
您可以使用动态sql进行以下操作:
excute immediate 'select * from ' || v_rows.table_name;
请看一下ExecuteImmediate和DBMS_SQL的用法,以了解动态SQL
要从这些查询中获得结果,您必须使用上述描述中也解释过的显式游标。不,这是不可能的。不能将变量用作表名或架构名。 为此,您必须使用本机动态SQL或DBMS_SQL 此外,您不能在PL/SQL中使用普通的“SELECT*from v_rows.table_name”——您需要在目标中放入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;
现在,我正在使用EXECUTE IMMEDIATE“select count from”| | c.table_name | | |减去select count from wait。”| | c.table_name进入v|u cnt;但是出现错误“未找到数据”,解决方法是什么?在调用EXECUTE IMMEDIATE之前,请尝试打印SQL语句,并直接运行SQL语句-这会让您了解出了什么问题我已更新了答案。@user2629100-这是一个新问题,您应该将其作为新问题发布。StackOverflow是一个问答网站,不是论坛。请尊重社区,正确使用本网站。可能重复的您能告诉我为什么您需要选择声明吗?不能只编写select语句而不立即执行。你能分享一下你的问题吗?你想实现什么是的,我被立即执行绊倒了。