动态选择不会得到结果

时间:2011-12-04 11:02:08

标签: sql oracle select dynamic plsql

我正在尝试在循环中执行动态选择,但我没有得到任何结果。我想让它像正常选择一样工作。

create or replace type proc_args as varray(20) of varchar2(50);
/

create or replace procedure proc_show_tab(args proc_args)
is
 id_kursora integer;
 wart integer;
 polecenie varchar2(30);

  begin
    for i in 1..args.count loop
      polecenie := 'SELECT * FROM '||args(i);
      execute immediate polecenie;        
    end loop;
  end;
/

show error;

declare
  args2 proc_args;
begin
  args2 := proc_args();
  args2.extend(2);
  args2(1) := 'osrodek';
  args2(2) := 'trasa';

  proc_show_tab(args2);
end;
/

1 个答案:

答案 0 :(得分:5)

PL / SQL在如何将数据返回到执行客户端方面与T-SQL不同。 SQL SELECT语句在代码中执行两次,但不会将结果返回给任何东西 - 要将数据返回给客户端,您需要显式返回REF CURSOR(并且客户端需要知道您是)或使用DBMS_OUTPUT.put_line或类似的东西在“输出”中显示结果。当你完成“匿名块”时,意味着你的块完成没有错误。

如何返回结果将取决于您要完成的任务。