2017-08-02 5 views
1

単純な結果セットに'true'または'false'のいずれかを返すストアドプロシージャmydb.iscustomereligible(someGUID)があります。PL/SQLクエリからdbms_outputバッファを選択しますか?

顧客が適格でない場合、procはdbms_outputの理由を出力します(例:reason code: Invalid Age: 2)。

dbms_outputテキストを含めるために、次のステートメントを改善するにはどうすればよいですか?

select mydb.iscustomereligible('1F2629379C4FA046E050C90A0C5A3000') from dual; 

これは私がこれまでに出てくる(と惨めに失敗)したものですが、私はDBMS_OUTPUT.GET_LINEここ

declare 
    v_Data dbms_output.chararr; 
    v_NumLines number; 
begin 
    -- enable the buffer first 
    dbms_output.enable(1000000); 
    dbms_output.put_line('hi'); 
    select mydb.iscustomereligible('1F2629379C4FA046E050C90A0C5A3000') from dual; 
    select dbms_output.get_line(???) from dual; 
end; 

感謝:)

+0

PS:私はちょうど結果を照会する 'iscustomereligible'ストアドプロシージャのソースを変更するためのアクセスや意図を持っていない... – ropata

+0

あなたは、通常の出力を見て、serveroutputをon'の設定'必要のdbms_outputの - 私はそれがPL/SQL開発者のために同じだと仮定 –

答えて

5

を動作させることはできませんです変更しない関数の例。私はそれが1行だけを置くと仮定します。ここで

create or replace function iscustomereligible return boolean is 
begin 
    dbms_output.enable(1000000); 
    dbms_output.put_line('hi'); 
    return true; 
end; 
/

あなたは明らかにその関数によって書かれたDBMS_OUTPUTラインに変更されることはありません、関数の結果を連結する関数です。

create or replace function debug_iscustomereligible return varchar2 is 
    v_line varchar2(4000); 
    v_status number; 
    v_el  boolean; 
begin 
    v_el := iscustomereligible; 
    dbms_output.get_line(v_line, v_status); -- ignoring v_status if null is ok 
    return 'customer ' || case v_el when true then 'eligible' else 'ineligible' end || ': ' || v_line; 
end; 
/

ここでは、クエリを実行するだけで結果を照会する方法を示します。

select debug_iscustomereligible() from dual; 
関連する問題