1

我编写了以下存储过程以将多个数据集返回到我的前端 .Net 应用程序

create or replace PROCEDURE GET_EMPLOYEE_INFO 
(
  EMP_NO IN VARCHAR2,
  E_RECORD_SET1 OUT SYS_REFCURSOR,
  E_RECORD_SET2 OUT SYS_REFCURSOR,
  E_RECORD_SET3 OUT SYS_REFCURSOR,
  E_RECORD_SET4 OUT SYS_REFCURSOR
) AS 
BEGIN
  OPEN E_RECORD_SET1 FOR
    SELECT * FROM EMP.EMPLOYEES;

  OPEN E_RECORD_SET2 FOR
    SELECT * FROM EMP.CITIES;

  OPEN E_RECORD_SET3 FOR
    SELECT * FROM EMP.STATES;

  OPEN E_RECORD_SET1 FOR
    SELECT * FROM EMP.DURATION;

每个查询都可以自行正确执行。当我执行存储过程时,它会显示结果集,但我不相信正在获取所有数据。在底部,它仍然显示“RUNNING IDE CONNECTION”。

  • 程序是否循环?
  • 类型有限制SYS_REFCURSOR吗?
  • 我需要关闭这些游标吗?
4

1 回答 1

0
  • 我假设您的实际存储过程END最后没有丢失。您发布的代码不会编译。
  • 我假设您的存储过程也在使用EMP_NO参数做一些事情。
  • 我假设尽管名称暗示它是一个数字,但EMP_NO实际上被声明为一个字符串。

假设一切都是真的

  • 为什么你认为所有数据都没有被获取?
  • “在底部,它仍然说”这句话所指的“它”是什么?这是您的 C# 应用程序吗?你骑?还有什么?
  • 您发布的代码(假设END添加了它以便编译)不能循环。您的代码只是打开游标,不执行 SQL 语句,也不生成任何数据。在客户端应用程序开始获取数据之前不会发生这种情况。
  • 尽管这是一个不寻常的设计,但拥有一个返回四个SYS_REFCURSOR参数的过程在语法上是完全有效的。这不会影响从游标中获取的数据。
  • 是的,您的客户端应用程序需要在从它们获取所有数据后关闭这些游标。
于 2012-07-19T21:21:28.647 回答