gpt4 book ai didi

oracle - 显示来自 oracle 10g 存储过程的结果集

转载 作者:行者123 更新时间:2023-12-02 00:36:37 24 4
gpt4 key购买 nike

我正在使用 PL/SQL Developer,我已经编写了一个程序来运行报告,我需要一个程序来输出结果集。

程序接受输入参数,需要输出结果集。

我无法使用 View ,因为该过程调用了多个 API,这些 API 接受我传递给该过程的参数。

我从大量搜索中了解到可以使用 ref_cursor 但我无法让 ti 工作。

该过程的简化版本是:

CREATE OR REPLACE PROCEDURE IFSINFO.SHORTAGE_SHEET (vSite     IN VARCHAR2,
vBuyer IN VARCHAR2,
vSupplier IN VARCHAR2,
vCursor OUT SYS_REFCURSOR)
AS
BEGIN
OPEN vCursor FOR
SELECT blah blah blah blah blah blah;
END;

我已尝试执行该过程并使用以下方法显示结果集:

BEGIN
vsite := 'S03';
vbuyer := 'AW';
vsupplier := '%';
vcursor refcursor;

IFSINFO.SHORTAGE_SHEET(vsite => :vsite,
vbuyer => :vbuyer,
vsupplier => :vsupplier,
vcursor => :vcursor);
print vcursor;
END;

还有:

variable rc refcursor; 
exec IFSINFO.SHORTAGE_SHEET('S03','AW','TQ1',:rc2);
print rc2

但两者都不起作用。请有人告诉我我已经不知所措了。

谢谢罗布

最佳答案

当您执行此过程或在 SQLPLUS 中运行它时,您是否看到错误?你能按原样发布你的 sqlplus session 吗?

PRINT 是 sqlplus 特定的命令,不能在过程 block 内调用。如果您需要在过程中打印 refcursor 的结果,那么您需要从中获取并以您需要的格式打印每条记录。

SQL> create or replace procedure test_REFCURSOR (
2 i_number in number,
3 o_cursor out sys_refcursor)
4 as
5 begin
6 open o_cursor for
7 'select empno, ename from emp
8 where rownum < ' || i_number ;
9 end;
10 /

Procedure created.

SQL> variable rc refcursor;
SQL> exec test_refcursor(5, :rc);

PL/SQL procedure successfully completed.

SQL> print rc;

EMPNO ENAME
---------- ----------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES

您还应该更改您的过程(或)过程调用以具有不同的变量名称。一般来说,我在所有输入变量前加上“i_”前缀,在所有输出变量前加上“o_”。这样,您的过程声明将看起来像..

CREATE OR REPLACE PROCEDURE IFSINFO.SHORTAGE_SHEET (i_Site     IN VARCHAR2,
i_Buyer IN VARCHAR2,
i_Supplier IN VARCHAR2,
o_Cursor OUT SYS_REFCURSOR) AS ....

过程调用将是..

IFSINFO.SHORTAGE_SHEET(    i_site     => vsite,
i_buyer => vbuyer,
i_supplier => vsupplier,
o_cursor => vcursor);

您不需要在这些变量的开头使用“:”,因为它们不是主机环境变量(这是您第二次使用 SQLPLUS 执行的情况,您在过程调用中使用了 sqlplus 变量“rc”)

关于oracle - 显示来自 oracle 10g 存储过程的结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4376044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com