2011-12-04 101 views
1

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

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

你怎么知道它没有得到任何结果。你目前的代码做选择,然后没有别的。 – Ben

+0

因为在输出中我只得到: 'TYPE proc_args编译 PROCEDURE proc_poka_tabele编译 没有错误。 完成的匿名块' – makbol

+1

它不会自行输出结果。例如,您必须将它们插入表或“dmbs_output.put_line”等。 – Ben

回答

5

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

如何返回结果取决于您要完成的操作。