【问题标题】:Suppress CURSOR message from sqlplus output抑制来自 sqlplus 输出的 CURSOR 消息
【发布时间】:2018-11-30 14:44:00
【问题描述】:

我有一个函数可以为给定的查询返回一个引用。

我这样调用函数。虽然这是一个简单的查询,但我的实际查询在使用 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

我不希望这些行在顶部,只希望光标的输出。

光标语句:1

如何阻止 sqlplus 或 SQL developer 显示它?我应该使用什么命令?

【问题讨论】:

    标签: oracle oracle-sqldeveloper sqlplus


    【解决方案1】:

    这看起来像一个返回引用光标的函数;是吗?

    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>
    

    【讨论】:

    • 谢谢。我添加了一个答案以包括 SET FEEDBACK OFF 以消除“PL/SQL 过程已成功完成”。太
    【解决方案2】:

    感谢 Littlefoot 的回答。我只能从表中提取行 在我的脚本中使用以下几行。

    SET FEEDBACK OFF
    SET PAGES 0
    VARIABLE c REFCURSOR
    spool /mypath/somefile.csv
    EXEC :c := myfunction('select * from employees')
    PRINT c
    

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 2018-02-02
      • 2019-02-09
      • 2012-06-20
      相关资源
      最近更新 更多