从 sqlplus 输出中抑制 CURSOR 消息
Suppress CURSOR message from sqlplus output
我有一个函数 returns 给定查询的引用。
我是这样调用函数的。虽然这是一个简单的查询,但我的实际查询对于 where 子句的其他参数更加动态。
select myfunction('select * from employees') as f from dual;
它给了我输出
F
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DAT JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
----------- -------------------- ------------------------- ------------------------- -------------------- -------- ---------- ---------- -------------- ---------- -------------
198 Donald OConnell DOCONNEL 650.507.9833 20070621 SH_CLERK 2600 124 50
199 Douglas Grant DGRANT 650.507.9844 20080113 SH_CLERK 2600 124 50
200 Jennifer Whalen JWHALEN 515.123.4444 20030917 AD_ASST 4400 101 10
201 Michael Hartstein MHARTSTE 515.123.5555 20040217 MK_MAN 13000 100 20
202 Pat Fay PFAY 603.123.6666 20050817 MK_REP 6000 201 20
203 Susan Mavris SMAVRIS 515.123.7777 20020607 HR_REP 6500 101 40
204 Hermann Baer HBAER 515.123.8888 20020607 PR_REP 10000 101 70
我不想要这些行在顶部,只想要光标的输出。
CURSOR STATEMENT : 1
如何阻止 sqlplus 或 SQL 开发人员显示它?我应该使用什么命令?
这看起来像一个 returns 引用游标的函数;是吗?
SQL> create or replace function f_my (par_select in varchar2)
2 return sys_refcursor
3 is
4 l_rc sys_refcursor;
5 begin
6 open l_rc for par_select;
7 return l_rc;
8 end;
9 /
Function created.
这是您目前拥有的:
SQL> select f_my('select * From dept') as f from dual;
F
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
那么,如何去掉那些 CURSOR STATEMENT : 1
行呢?显示它们的是 SQLPlus(其他一些工具可能不会这样做)。但是,当您使用 SQLPlus 时,方法如下:
SQL> var v_rc refcursor
SQL> exec :v_rc := f_my('select * from dept')
PL/SQL procedure successfully completed.
SQL> print v_rc
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
感谢 Littlefoot 的回答。我只能从 table 中提取行
在我的脚本中使用以下行。
SET FEEDBACK OFF
SET PAGES 0
VARIABLE c REFCURSOR
spool /mypath/somefile.csv
EXEC :c := myfunction('select * from employees')
PRINT c
我有一个函数 returns 给定查询的引用。
我是这样调用函数的。虽然这是一个简单的查询,但我的实际查询对于 where 子句的其他参数更加动态。
select myfunction('select * from employees') as f from dual;
它给了我输出
F
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DAT JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
----------- -------------------- ------------------------- ------------------------- -------------------- -------- ---------- ---------- -------------- ---------- -------------
198 Donald OConnell DOCONNEL 650.507.9833 20070621 SH_CLERK 2600 124 50
199 Douglas Grant DGRANT 650.507.9844 20080113 SH_CLERK 2600 124 50
200 Jennifer Whalen JWHALEN 515.123.4444 20030917 AD_ASST 4400 101 10
201 Michael Hartstein MHARTSTE 515.123.5555 20040217 MK_MAN 13000 100 20
202 Pat Fay PFAY 603.123.6666 20050817 MK_REP 6000 201 20
203 Susan Mavris SMAVRIS 515.123.7777 20020607 HR_REP 6500 101 40
204 Hermann Baer HBAER 515.123.8888 20020607 PR_REP 10000 101 70
我不想要这些行在顶部,只想要光标的输出。
CURSOR STATEMENT : 1
如何阻止 sqlplus 或 SQL 开发人员显示它?我应该使用什么命令?
这看起来像一个 returns 引用游标的函数;是吗?
SQL> create or replace function f_my (par_select in varchar2)
2 return sys_refcursor
3 is
4 l_rc sys_refcursor;
5 begin
6 open l_rc for par_select;
7 return l_rc;
8 end;
9 /
Function created.
这是您目前拥有的:
SQL> select f_my('select * From dept') as f from dual;
F
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
那么,如何去掉那些 CURSOR STATEMENT : 1
行呢?显示它们的是 SQLPlus(其他一些工具可能不会这样做)。但是,当您使用 SQLPlus 时,方法如下:
SQL> var v_rc refcursor
SQL> exec :v_rc := f_my('select * from dept')
PL/SQL procedure successfully completed.
SQL> print v_rc
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
感谢 Littlefoot 的回答。我只能从 table 中提取行 在我的脚本中使用以下行。
SET FEEDBACK OFF
SET PAGES 0
VARIABLE c REFCURSOR
spool /mypath/somefile.csv
EXEC :c := myfunction('select * from employees')
PRINT c