使用不带参数的Oracle存储过程

3

我尝试调用一个不接受任何输入参数的Oracle存储过程。但是,当运行该过程时,我会收到一个错误消息,其中指出

PLS-00306: wrong number or types of arguments in call to 'MY_PROC'

为了调用该过程,我只需在TOra中输入以下文本:

BEGIN
 SCHEMA.MY_PROC();
END;

我也尝试过(但是出现了相同的错误)。
EXEC  SCHEMA.MY_PROC();

我熟悉MSSQL,能够使用SQL服务器执行存储过程而无任何问题,但是我无法弄清楚如何在Oracle中执行相同的操作。我无法查看存储过程的实际代码,但从有限的文档中可以看出,它不接受任何输入参数,返回值为一个游标。我感觉我需要以某种方式传入游标,但我尝试过的一切都没有奏效。
我只想查看存储过程的结果,就像执行了一个SELECT语句一样,在TOra界面的结果面板中填充记录以填充数据网格。

2
你能发布一下你的过程定义吗? - Russ Clarke
1
即使您没有源代码,也可以描述该过程以查看期望的参数及其类型。我希望它看起来与@Justin Cave的示例非常相似。这在SQL * Plus和SQL Developer中也适用,但不确定TOra是否适用。 - Alex Poole
1个回答

5

听起来这个过程确实有一个OUT参数(在Oracle中,过程不会返回任何东西,但可以有OUT和IN OUT参数,函数会返回一些东西)。所以你需要传递一个变量给那个OUT参数。像这样:

DECLARE
  l_results SYS_REFCURSOR;
BEGIN
  schema.my_proc( l_results );
END;

应该成功调用该过程。但是现在你想让你的GUI显示来自该游标的结果。不幸的是,这会变得更加复杂,因为现在你正在谈论一个特定于GUI的问题。

我不使用TOra,所以我不知道你需要在TOra中做什么才能使游标显示。在SQL*Plus(或SQL Developer,Oracle的免费GUI)中,你可以执行以下操作:

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;

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接