2017-04-20 29 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客户端可能以不同方式显示结果。