2017-04-20 45 views
0

我正在試圖創建一個程序,它會以網格形式給出結果(如果可能的話)。將在網格中給出結果的oracle sql程序

實際上,它是用3-5參數正常的查詢,但我想這樣做的過程中(我將使用它的程序我正在做)

我知道如何創建簡單的程序,但這些只會給我一行輸出。 是這樣的:

---run procedure 

SET SERVEROUTPUT ON; 

begin 
    procedure_name(param1); 
end; 

---procedure output 

anonymous block completed 

sample procedure_name output 
+0

甲骨文沒有這樣的運氣。你需要使用'dbms_output.put_line()'(或類似的東西)來獲得輸出。如果你想打印查詢結果,那麼你需要遍歷結果。 –

+0

@GordonLinoff這個dbms_output.put_line()將只顯示一個結果,還是可以顯示多個結果?此外,謝謝你編輯我的問題,我必須學會如何做到這一點。 – itsmePJ

+0

@itsmePJ您是否意味着您想要在執行過程時返回多行? – user75ponic

回答

0

- 簡單的過程返回遊標作爲輸出參數

CREATE OR REPLACE PROCEDURE proc_out_cur (OUT_RES OUT SYS_REFCURSOR) 
AS 
BEGIN 
    OPEN OUT_RES FOR SELECT 22 FROM DUAL; 
END; 
-- Call procedure from anonymous block using bind var for the 
-- cursor output. When prompted by Toad choose CURSOR as the 
-- variable's datatype. 
BEGIN 
    proc_out_cur (:res); 
END; 
0

在Oracle 12c中這可以使用DBMS_SQL.RETURN_RESULT來實現:

create or replace procedure get_data 
    c1 SYS_REFCURSOR; 
    c2 SYS_REFCURSOR; 
BEGIN 
    OPEN c1 FOR 
    select 'First result' as what, 1 as some_number from dual; 
    DBMS_SQL.RETURN_RESULT(c1); 

    OPEN c2 FOR 
    select 'Second result' as what, 2 as second_column, 3 as third_column 
    from dual; 
    DBMS_SQL.RETURN_RESULT(c2); 

END; 
/

然後運行它:

exec get_data; 

並且例如SQL * Plus會顯示:

SQL> exec get_data; 

PL/SQL procedure successfully completed. 

ResultSet #1 

WHAT   SOME_NUMBER 
------------ ----------- 
First result   1 

1 row selected. 

ResultSet #2 

WHAT   SECOND_COLUMN THIRD_COLUMN 
------------- ------------- ------------ 
Second result    2   3 

1 row selected. 

SQL> 

其他SQL客戶端可能以不同方式顯示結果。