在 Oracle 11g 的过程中将 REFCURSOR 变量打印为 OUT 参数时出错

Error printing REFCURSOR variable as OUT parameter in procedure in Oracle 11g(在 Oracle 11g 的过程中将 REFCURSOR 变量打印为 OUT 参数时出错)
本文介绍了在 Oracle 11g 的过程中将 REFCURSOR 变量打印为 OUT 参数时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Oracle (Oracle 11.1.0.7.0).我在 MyPackage 包中创建了一个示例存储过程.我以用户DBA_USER"身份登录以创建此 SP.

I am using Oracle (Oracle 11.1.0.7.0). I have created a sample stored procedure inside a package MyPackage. I was logged in as a user "DBA_USER" for creating this SP.

PROCEDURE WT_MANAGEMENT_PRODUCTIVITY 
(
cur_output Out T_CURSOR
)AS 

sqlstr VARCHAR2(5000);
 BEGIN
  Sqlstr:='select sysdate from dual';
  Open cur_output For Sqlstr;

 END WT_MANAGEMENT_PRODUCTIVITY;

我尝试使用

var r ref cursor;
exec MyPackage.WT_MANAGEMENT_PRODUCTIVITY(:r);
print r;

但它在 Oracle SQL Developer 中引发以下错误

But it throws following error in Oracle SQL Developer

Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
BINARY_FLOAT | BINARY_DOUBLE ] ]


Error starting at line 2 in command:
exec MyPackage.WT_MANAGEMENT_PRODUCTIVITY(:r);
Error report:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'WT_MANAGEMENT_PRODUCTIVITY'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:
%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
r
------

T_CURSOR 是类型:

T_CURSOR is type:

TYPE T_CURSOR IS REF CURSOR;

推荐答案

var r ref 游标;

var r ref cursor;

以上在语法上是不正确的.应该是 -

The above is syntactically incorrect. It should be -

var r refcursor

ref cursor 之间没有空格,是一个词,refcursor.

There is not space between ref cursor, it is one word, refcursor.

例如

SQL> create table t as select * from emp;

Table created.

SQL> var r refcursor
SQL>
SQL> begin
  2     open :r for select * from t;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL>
SQL> delete from t;

14 rows deleted.

SQL> commit;

Commit complete.

SQL>
SQL> print r

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM
---------- ---------- --------- ---------- --------- ---------- ----------
     DEPTNO
----------
      7369 SMITH      CLERK           7902 17-DEC-80        800
        20

      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300
        30

      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500
        30


      7566 JONES      MANAGER         7839 02-APR-81       2975
        20

      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400
        30

      7698 BLAKE      MANAGER         7839 01-MAY-81       2850
        30

      7782 CLARK      MANAGER         7839 09-JUN-81       2450
        10

      7788 SCOTT      ANALYST         7566 09-DEC-82       3000
        20

      7839 KING       PRESIDENT            17-NOV-81       5000
        10

      7844 TURNER     SALESMAN        7698 08-SEP-81       1500
        30

      7876 ADAMS      CLERK           7788 12-JAN-83       1100
        20

      7900 JAMES      CLERK           7698 03-DEC-81        950
        30


      7902 FORD       ANALYST         7566 03-DEC-81       3000
        20

      7934 MILLER     CLERK           7782 23-JAN-82       1300
        10


14 rows selected.

SQL>

这篇关于在 Oracle 11g 的过程中将 REFCURSOR 变量打印为 OUT 参数时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

SQL to Generate Periodic Snapshots from Transactions Table(用于从事务表生成定期快照的SQL)
MyBatis support for multiple databases(MyBatis支持多个数据库)
Oracle 12c SQL: Missing column Headers in result(Oracle 12c SQL:结果中缺少列标题)
SQL query to find the number of customers who shopped for 3 consecutive days in month of January 2020(查询2020年1月连续购物3天的客户数量)
How to get top 10 data weekly (This week, Previous week, Last month, 2 months ago, 3 month ago)(如何每周获取前十大数据(本周、前一周、上个月、2个月前、3个月前))
Select the latest record for an Id per day - Oracle pl sql(选择每天ID的最新记录-Oracle pl SQL)