Stored procedures 如何执行具有OUT参数的过程

Stored procedures 如何执行具有OUT参数的过程,stored-procedures,plsql,Stored Procedures,Plsql,我创建这个过程是为了连接两个表并选择数据。基本sql语句按预期工作 CREATE OR REPLACE PROCEDURE task1 (p_task1 OUT SYS_REFCURSOR) AS BEGIN OPEN p_task1 FOR SELECT Department.D#, Department.DNAME, Employee.D#, Employee.Name FROM Department JOIN Employee ON Employee.D#

我创建这个过程是为了连接两个表并选择数据。基本sql语句按预期工作

CREATE OR REPLACE PROCEDURE task1
(p_task1 OUT SYS_REFCURSOR)
AS
BEGIN
    OPEN p_task1 FOR
    SELECT Department.D#, Department.DNAME, Employee.D#, Employee.Name
    FROM Department JOIN Employee ON
    Employee.D# = Department.D#;
END task1;
/
但是,当我在SQL*Plus中使用命令
EXECUTE task1
时,我收到以下错误:

SQL> EXECUTE task1;
BEGIN task1; END;

      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'TASK1'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

我对错误及其与参数的关联做了一些研究,但我不确定我需要什么参数,我甚至不打算编写获取参数的过程。

您有一个OUT参数。。。但仍然是一个参数,在您的过程中,您已将该参数声明为

(p\u任务1输出系统参考光标)

因此,在调用task1时,需要为其提供一个放置输出的位置(OUT参数)

因此,在你的终端中,你会有一些如下所示的东西

execute declare ref_cur SYS_REFCURSOR; begin task1(ref_cur); end;
在上面的行中,我们添加了declare ref\u cur SYS\u REFCURSOR允许您访问过程获取的数据


然而,在这个阶段,您只是获取数据,然后对其不做任何处理。一旦检索到,您将需要遍历ref_光标,并对其执行任何操作。

我是将其放入终端还是我的过程?@NickJam我已更新了我的答案,以尝试使其更清晰。希望这对你有所帮助