【问题标题】:Complex Cursors for returning multiple rows用于返回多行的复杂游标
【发布时间】:2010-09-02 10:46:53
【问题描述】:

游标中的每一行都应该与另一个表连接,并且整个结果应该返回一个游标

说 cursor1 返回 5 行。 这 5 行中的每一行都应与 table1 连接。 并且所有 5 行的最终结果应返回 1 行。

请帮忙

【问题讨论】:

  • 因此,您希望将 cursor1 中的五行连接到 table1 中的相应行,然后您希望将连接产生的行连接在一起形成一个巨大的单行?对吗?
  • 真的不清楚你要什么。一些示例输入数据和预期输出将非常有帮助。它不必是完整的数据集,使用 EMP 和 DEPT 的简单测试用例就可以了。
  • 如果更改结果集的“光标”一词,它会变得更简单。它只是一个连接,内联视图可能会这样做。发布代码怎么样(或者至少是精简版)

标签: sql plsql cursor


【解决方案1】:

将从 ref 游标中提取的记录与另一个查询的结果集结合起来相当棘手。一个更好的主意是只打开一个带有 SELECT 的引用游标,该 SELECT 连接所有相关表。

【讨论】:

  • 连接5个表employeeID、employeename、nativeplace、permanentplace、presentplace等后光标中的列......表B:employeeid、employeename、place、phone、zip、street等。 .. 最后我们应该返回一个游标,根据empid和empname将游标结果和表B结果连接起来。是否可以返回一个光标?请帮助
【解决方案2】:

问题不清楚,但听起来你需要的是这样的东西

a) 使用结果行的形状定义对象类型 b) 定义该对象类型的集合 c) 创建一个返回类型为集合类型的函数——这可以将游标 A 作为参数 (SYS_REFCURSOR),将游标 A 中的每一行连接到表 B,然后对每个结果行使用 PIPE ROW。 d) 如果需要最终结果作为光标,则使用另一个函数

 FUNCTION complex_query(in_cursor SYS_REFCURSOR) 
 RETURN SYS_REFCURSOR
 IS
     lreturn SYS_REFCURSOR;
 BEGIN
     OPEN lreturn FOR
        (SELECT * FROM TABLE(convert_to_collection(in_cursor)));
     RETURN lreturn;
 END;

或者,您可以直接执行 SELECT * FROM TABLE(convert_to_collection(in_cursor))。

我不明白的是要求所有内容都作为 1 行返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多