0

嗨有没有办法在 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;
4

2 回答 2

1

您可以为此使用动态 sql:

excute immediate 'select * from ' || v_rows.table_name;

请看描述execute immediate学习 DBMS_SQL动态sql。

要从此类查询中获取结果,您必须使用显式游标(也在上面提到的描述中解释过)。

于 2013-07-29T06:33:22.827 回答
1

不,这是不可能的。您不能将变量用作表或模式名称。为此,您必须使用本机动态 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;
于 2013-07-29T06:34:57.197 回答