如何从Oracle存储过程中获取结果集?
这听起来像是一个简单、直截了当的问题,但我想不出来。经过数小时的在线搜索,我比开始时更加迷茫 我只想编写一些代码,从我的过程中生成一个结果集 以下是程序的启动方式:如何从Oracle存储过程中获取结果集?,oracle,stored-procedures,resultset,toad,Oracle,Stored Procedures,Resultset,Toad,这听起来像是一个简单、直截了当的问题,但我想不出来。经过数小时的在线搜索,我比开始时更加迷茫 我只想编写一些代码,从我的过程中生成一个结果集 以下是程序的启动方式: CREATE OR REPLACE PROCEDURE TEST_PROC ( Cursor OUT SYS_REFCURSOR, SDate IN DATE, EDate IN DATE, Department IN
CREATE OR REPLACE PROCEDURE TEST_PROC
(
Cursor OUT SYS_REFCURSOR,
SDate IN DATE,
EDate IN DATE,
Department IN VARCHAR2,
Users IN CLOB
)
IS
-- ...
然后它从两个不同的表中选择字段,将它们连接在一起,应用一些过滤,就是这样
当您希望从表中返回结果集时,可以编写如下内容:
SELECT * FROM TABLE;
我想做一些像这样简单的基本工作,但是要从存储过程中获取数据。我知道当我调用这个过程时,我必须提供参数
我在TOAD中使用SQL。有人能提供帮助吗?示例程序
CREATE OR REPLACE PROCEDURE TEST_PROC (P1 OUT SYS_REFCURSOR)
AS
BEGIN
OPEN P1 FOR SELECT * FROM user_tables;
END;
在Toad中执行时,告诉它在设置参数窗口中输出OUT参数的值,如屏幕截图所示。这是从蟾蜍12.7,所以你的对话可能看起来不同,但该选项已存在多年,你应该有它在那里的某个地方
CREATE OR REPLACE FUNCTION rs_func RETURN SYS_REFCURSOR IS
l_result SYS_REFCURSOR;
BEGIN
OPEN l_result FOR SELECT DUMMY FROM DUAL;
RETURN l_result;
END;
/
SELECT rs_func FROM DUAL;
您还可以将参数应用于函数,并从任何表或连接的表组合中进行选择。使用上述模板将作为函数的定义者执行查询。如果希望查询作为函数的调用者执行,请在函数规范中指定AUTHID CURRENT_USER。存储过程的工作方式与此类似,但根据使用存储过程的目标环境的不同,存在一些使用复杂性
你的问题要求你有能力
从表中选择*
但是使用存储过程。不能从仅SQL查询函数执行存储过程。具有执行以下操作的能力:
从存储的表中选择*_func。。。;
这利用了一个流水线函数,需要创建对象类型来定义函数的返回结构,而不是结果集。您可以打开一个游标并将其返回给调用者,他们在Oracle=>中将其命名为ref cursor。希望调用者正在关闭游标;谢谢你的链接,但这对我没有帮助。我不确定要运行什么代码。我在找一些简单的东西,比如一行。像select*from,它给了我一个数据网格。可能的重复请澄清您的问题。它是如何在存储产品中组装数据并通过refcursor公开结果的?或者是如何用ref游标的结果集填充数据网格?如果是后者,蟾蜍真的是你的目标吗,或者你想在C或其他语言中使用它吗?我不想重新创建这个过程来创建第二个过程。所以我不知道如何处理你的代码。我必须全部运行吗?是否有select语句使用过程而不是表来获取数据网格?我的代码只是提供一个工作示例的示例。因为您提供了不完整的代码,所以我无法向您展示使用您的过程的示例。在编辑器中加载代码后,执行它F11是Toad中的快捷方式,并将输出选项设置为屏幕截图中突出显示的选项。