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 界面结果面板中的数据网格。
听起来这个过程确实有一个 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 的免费 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;
Run Code Online (Sandbox Code Playgroud)
这将创建一个带有 OUT 参数的存储过程,该参数是一个游标,声明一个可以传入的主变量,然后打印结果。