不带参数调用 Oracle 存储过程

chr*_*ris 3 oracle stored-procedures

我正在尝试调用不接受输入参数的 Oracle 存储过程。但是,在运行该程序时,我收到一条错误消息,指出

PLS-00306: wrong number or types of arguments in call to 'MY_PROC'
Run Code Online (Sandbox Code Playgroud)

要调用 proc,我只需在 TOra 中输入以下文本:

BEGIN
 SCHEMA.MY_PROC();
END;
Run Code Online (Sandbox Code Playgroud)

我也试过(虽然同样的错误)

EXEC  SCHEMA.MY_PROC();
Run Code Online (Sandbox Code Playgroud)

我熟悉 MSSQL,并且可以使用 SQL 服务器毫无问题地执行 SP,但我不知道如何使用 Oracle 执行相同的操作。我无法查看存储过程的实际代码,但从我拥有的有限文档来看,它似乎不接受任何输入参数,并且返回值是一个引用游标。我有一种感觉,我需要以某种方式传入一个引用游标,但我在这方面尝试过的一切都没有奏效。

我只想查看 SP 的结果,就好像我做了一个SELECT语句,也就是说,记录填充了 TOra 界面结果面板中的数据网格。

Jus*_*ave 5

听起来这个过程确实有一个 OUT 参数(在 Oracle 中,过程不返回任何东西,但可以有 OUT 和 IN OUT 参数,函数返回一些东西)。因此,您必须为该 OUT 参数传入一个变量。就像是

DECLARE
  l_results SYS_REFCURSOR;
BEGIN
  schema.my_proc( l_results );
END;
Run Code Online (Sandbox Code Playgroud)

应该成功调用该过程。但是随后您希望您的 GUI 显示来自该光标的结果。不幸的是,这变得有点复杂,因为现在您正在谈论特定于 GUI 的问题。

我不使用 TOra,所以我不知道您需要在 TOra 中做什么才能使光标显示。在 SQL*Plus(或 SQL Developer,Oracle 的免费 G​​UI)中,您可以执行类似的操作

create or replace procedure my_proc( p_rc OUT SYS_REFCURSOR )
as
begin
  open p_rc
   for select 1 col1
         from dual;
end;
/

variable rc refcursor;
exec my_proc( :rc );
print rc;
Run Code Online (Sandbox Code Playgroud)

这将创建一个带有 OUT 参数的存储过程,该参数是一个游标,声明一个可以传入的主变量,然后打印结果。