2011-12-04 24 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

どのように結果が得られないのですか?あなたの現在のコードはselectを行い、その後は何もしません。 – Ben

+0

出力で私は得る: 'TYPE proc_argsがコンパイルされました プロシージャproc_poka_tabeleがコンパイルされました エラーはありません。 匿名ブロックが完了しました。 – makbol

+1

結果は単独では出力されません。たとえば、テーブルや 'dmbs_output.put_line'などに挿入する必要があります。 – Ben

答えて

5

PL/SQLは、実行中のクライアントにデータを返す方法がT-SQLと似ていません。 SQL SELECT文がコード内で2回実行されていますが、結果を何も返さない - クライアントにデータを返すためには、REF CURSORを明示的に返す必要があります(また、クライアントは自分自身であることを知る必要があります)。 DBMS_OUTPUT.put_lineなどを使用して、結果を「出力」に表示します。 「匿名ブロックが完了しました」と表示されるのは、ブロックがエラーなく完了したことを意味します。

結果を返す方法は、達成しようとしているものによって異なります。

関連する問題