2017-08-02 53 views
1

我有一個存儲過程mydb.iscustomereligible(someGUID),它在一個簡單的結果集中返回'true''false'從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 Developer是一樣的 –

回答

5

這裏是一個你不會修改的功能的例子。我認爲它只放一條線。

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;