在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客户端可能以不同方式显示结果。
甲骨文没有这样的运气。你需要使用'dbms_output.put_line()'(或类似的东西)来获得输出。如果你想打印查询结果,那么你需要遍历结果。 –
@GordonLinoff这个dbms_output.put_line()将只显示一个结果,还是可以显示多个结果?此外,谢谢你编辑我的问题,我必须学会如何做到这一点。 – itsmePJ
@itsmePJ您是否意味着您想要在执行过程时返回多行? – user75ponic