Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Oracle存储过程中获取结果集?_Oracle_Stored Procedures_Resultset_Toad - Fatal编程技术网

如何从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中的快捷方式,并将输出选项设置为屏幕截图中突出显示的选项。