首页 文章

Oracle函数返回大量列

提问于
浏览
0

我有一个查询,从许多表,嵌套选择查询和函数中选择大量列 .

首先我考虑创建一个视图,但创建一个带有IN参数的视图在oracle中并不常见...所以我想在其中创建一个带有此查询的函数,并将其作为一个返回表格类型 . 但是,我必须定义一个具有尽可能多的变量的对象类型,并循环遍历每一行或使用批量收集 . 但是,我的查询返回大约100列,定义对象类型将是一场噩梦 .

有什么建议如何解决这个问题?

编辑:我正在寻找的解决方案是使用我的查询创建一个函数,并能够使用SELECT my_function(:param1,:param2)显示结果,或类似select * from table(my_function(: p1,:p2)) . 表类型是唯一的方法,还是有其他更简单的方法来显示此函数的结果?为了说清楚,在这种情况下创建视图并不是很实用 .

EDIT2:我想创建类型记录,例如:创建具有所有列定义的对象类型,然后创建表类型并将其返回为流水线,如果我想使用SELECT语句检索这些值,则是唯一的方法 . 或者有一种更简单的方法可以做到这一点?是否可以使用基于游标的记录来简化此操作,并仍然使用简单的SELECT语句检索值?

2 回答

  • 0

    如果你想将你的函数用作表(至少你写了类似的东西) - 你必须定义类型才能创建流水线函数 . 流水线函数可以在SQL语句中用作简单表,因此它符合您的要求 . 但是再次 - 如果你真的需要流水线功能 - 你必须预定义类型对象并列出所有的"columns" . 这里是相应的文档:http://docs.oracle.com/cd/B28359_01/appdev.111/b28425/pipe_paral_tbl.htm#CHDJEGHC

    我不确定你真的需要它..我想你可以从你的函数返回简单的sys_refcursor . 在这种情况下,没有必要预定义函数之外的任何数据结构 . 这是一个简单的例子:

    CREATE OR REPLACE FUNCTION get_dummy
      RETURN SYS_REFCURSOR
      AS
        my_cursor SYS_REFCURSOR;
      BEGIN
        OPEN my_cursor FOR SELECT 1 FROM dual;
        RETURN my_cursor;
      END get_dummy;
    
  • 1

    对不起,如果我的评论误导你 . 你可以有一个引用游标 . 然后有一个具有光标%rowtype的变量 . 然后可以将这些列作为rowtype_variable.column_name(loop_int)进行访问 .

    如果这是你期望的任何关闭,那么我可以帮助你更多 . 否则详细说明你的问题 .

相关问题