【问题标题】:Dynamic select doesn't get results动态选择没有得到结果
【发布时间】:2012-01-12 13:48:22
【问题描述】:

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

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;
/

【问题讨论】:

  • 你怎么知道它没有得到任何结果。您当前的代码执行选择,然后没有其他操作。
  • 因为在输出中我只得到:TYPE proc_args compiled PROCEDURE proc_poka_tabele compiled No Errors. anonymous block completed
  • 它不会自己输出结果。例如,您必须将它们插入表格或dmbs_output.put_line 等。

标签: sql oracle select dynamic plsql


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多