我正在尝试创建一个能够以网格形式给出结果的过程(如果可能的话)。
实际上,这是一个有3-5个参数的普通查询,但我想在一个过程中完成(我将在我正在编写的程序中使用它)
我知道如何创建简单的过程,但这些过程只能给我一行输出。如下所示:
---run procedure
SET SERVEROUTPUT ON;
begin
procedure_name(param1);
end;
---procedure output
anonymous block completed
sample procedure_name output发布于 2017-07-18 13:45:18
在Oracle12c中,这可以使用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客户端可能会以不同的方式显示结果。
发布于 2017-07-18 10:48:51
--将游标作为输出参数返回的简单过程
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;https://stackoverflow.com/questions/43508441
复制相似问题