不带参数调用Oracle存储过程

时间:2011-07-19 18:32:22

标签: oracle stored-procedures

我正在尝试调用不接受输入参数的Oracle存储过程。但是,在运行该过程时,我收到一条错误回复状态

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

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

BEGIN
 SCHEMA.MY_PROC();
END;

我也尝试过(同样的错误)

EXEC  SCHEMA.MY_PROC();

我熟悉MSSQL,我能够使用SQL服务器执行SP没有问题,但我无法弄清楚如何对Oracle执行相同的操作。我无法查看存储过程的实际代码,但是根据我的有限文档,它似乎不接受任何输入参数,返回值是引用游标。我有一种感觉,我需要以某种方式传递一个引用光标,但我在这方面尝试过的一切都没有用。

我只想查看SP的结果,就像我已经完成SELECT语句一样,即在TOra界面的结果面板中填充数据网格的记录。

1 个答案:

答案 0 :(得分:4)

听起来这个过程确实有一个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参数的存储过程,该参数是游标,声明可以传入的主机变量,然后打印结果。