2011-12-04 150 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或類似的東西在「輸出」中顯示你的結果。當你得到「匿名塊完成」,這意味着你的塊完成沒有錯誤。

如何返回結果取決於您要完成的操作。