Oracle 有没有办法在“FROM”子句中使用PLSQL变量?

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

嗨,有没有办法在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
        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语句而不立即执行。你能分享一下你的问题吗?你想实现什么是的,我被立即执行绊倒了。