Plsql 是否在refcursor中显示行而不打印?
我有一个如下所示的存储过程:Plsql 是否在refcursor中显示行而不打印?,plsql,oracle11g,oracle-sqldeveloper,Plsql,Oracle11g,Oracle Sqldeveloper,我有一个如下所示的存储过程: CREATE OR REPLACE PROCEDURE GET_USERS(cursor_ OUT SYS_REFCURSOR) AS BEGIN OPEN cursor_ FOR SELECT * FROM SYS.dba_users; END; var mycursor refcursor; exec GET_USERS ( :mycursor ); print mycursor; 我这样测试它: CREATE OR REPLACE PRO
CREATE OR REPLACE PROCEDURE GET_USERS(cursor_ OUT SYS_REFCURSOR)
AS
BEGIN
OPEN cursor_ FOR
SELECT * FROM SYS.dba_users;
END;
var mycursor refcursor;
exec GET_USERS ( :mycursor );
print mycursor;
我这样测试它:
CREATE OR REPLACE PROCEDURE GET_USERS(cursor_ OUT SYS_REFCURSOR)
AS
BEGIN
OPEN cursor_ FOR
SELECT * FROM SYS.dba_users;
END;
var mycursor refcursor;
exec GET_USERS ( :mycursor );
print mycursor;
问题在于,打印
将其显示在脚本输出
选项卡中,而不是查询结果
(带网格)。对我来说,从网格上阅读更容易
问题1:如何测试存储过程,以使结果与网格一起显示在查询结果中
问题2:运行常规的SELECT
语句时,F5
和绿色箭头按钮之间有什么区别?当我突出显示时,从SYS.dba_用户中选择*
并按F5
我在脚本输出中获得结果。如果我按下绿色箭头按钮,结果将显示在查询结果中
如何测试存储过程以显示结果
在查询结果中使用网格
除非您将过程作为函数编写并在SELECT查询中使用它,否则您不会
像这样:
create or replace function ref_expensive_emps return sys_refcursor
as
c sys_refcursor;
begin
open c for select * from employees order by salary desc fetch first 10 rows only;
return c;
end ref_expensive_emps;
/
select ref_expensive_emps() from dual;
或者将SELECT FROM DUAL作为脚本执行
REF_EXPENSIVE_EMPS()
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID COLUMN1
----------- -------------------- ------------------------- ------------------------- -------------------- ------------------- ---------- ---------- -------------- ---------- ------------- --------------------------------------------------------------------------------------------------------------------------------
100 Suppo0rt King Suppo0rt 515.123.4567 21-AUG-18 07.09.58 AD_PRES 49243.75 90
101 Neena Kochhar NKOCHHAR 515.123.5368 21-SEP-89 00.00.00 AD_VP 34888.29 100 90
102 Lex De Haan LDEHAAN 515.123.4569 13-JAN-93 00.00.00 AD_VP 34888.29 100 90
145 John Russell JRUSSEL 011.44.1344.429268 01-OCT-96 00.00.00 SA_MAN 28735.94 .4 100 80
146 Karen Partners KPARTNER 011.44.1344.467268 05-JAN-97 00.00.00 SA_MAN 27710.55 .3 100 80
201 Michael Hartstein MHARTSTE 515.123.5555 17-FEB-96 00.00.00 MK_MAN 26685.16 100 20
108 Nancy Greenberg NGREENBE 515.124.4569 17-AUG-94 00.00.00 FI_MGR 24634.38 101 100
205 Shelley Higgins SHIGGINS 515.123.8080 07-JUN-94 00.00.00 AC_MGR 24634.38 101 110
147 Alberto Errazuriz AERRAZUR 011.44.1344.429278 10-MAR-97 00.00.00 SA_MAN 24634.38 .3 100 80
168 Lisa Ozer LOZER 011.44.1343.929268 11-MAR-97 00.00.00 SA_REP 23608.99 .25 148 80
10 rows selected.
问题2:F5和绿色箭头有什么区别
运行常规SELECT语句时的按钮
常规select语句:我们运行查询,执行单个提取,保持数据集打开,并在网格中打印结果。当您在网格中滚动时,我们会根据需要进行更多的抓取。如果耗尽结果集或关闭网格,则db上的工作已完成
F5/作为脚本执行:我们通过脚本引擎(模仿SQL*Plus)运行编辑器中的任何内容或高亮显示的内容,并在脚本输出面板中打印出来。所有行都已获取
如果通过代码编辑器执行SP,则可以在网格中看到Refcursors,但与SQL工作表的网格不同
哦,使用refcursor,您只需打开/读取一次…您可以将其创建为返回定义类型的函数,然后直接在SQL中查询(例如,从表中选择*(myfunction)),谢谢。你是否有一个链接来解释如何创建一个返回定义类型的函数。是否可以通过单击绿色箭头按钮或按F5
,对其进行测试并在网格中显示结果?我更新了我的答案,但是@fdkgfosfskjdlsjdlkfsfI尝试从dual调用选择refcursor_函数使用绿色按钮和查询结果
选项卡,code>只返回一列(列名REFCURSOR\u FUNCTION
)和所有内容。再次查看图片,向右滚动,双击单元格,获取铅笔,单击-获取“漂亮的网格”…或作为脚本运行,获取常规查询输出,我看到了它。我想我的问题是,如何在网格中的函数或过程中显示select
语句的结果,而不需要多次单击