【问题标题】:Call Oracle stored procedure with no arguments不带参数调用 Oracle 存储过程
【发布时间】:2011-10-08 19:06:26
【问题描述】:

我正在尝试调用不接受任何输入参数的 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 Server 毫无问题地执行 SP,但我不知道如何使用 Oracle 执行相同的操作。我无法查看存储过程的实际代码,但从我拥有的有限文档来看,它似乎不接受任何输入参数,并且返回值是一个引用游标。我有一种感觉,我需要以某种方式传递一个引用光标,但我在这方面所做的一切尝试都没有奏效。

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

【问题讨论】:

  • 你能发布你的程序的定义吗?
  • 即使你没有源代码,你也可以describe该过程来查看需要哪些参数,以及它们是什么类型。我希望它看起来很像@Justin Cave 的例子。这也适用于 SQL*Plus 和 SQL Developer,但也不知道 TOra。

标签: oracle stored-procedures


【解决方案1】:

听起来过程确实有一个 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 的免费 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;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2011-07-19
    • 2019-10-29
    • 2013-11-17
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多