从 PL/SQL 函数返回一个“表”(没有预定义列名)

Posted

技术标签:

【中文标题】从 PL/SQL 函数返回一个“表”(没有预定义列名)【英文标题】:Returning a 'table' (without pre-defining column names) from a PL/SQL function 【发布时间】:2014-10-09 18:37:37 【问题描述】:

供您参考,我的问题基于此网络教程http://www.adp-gmbh.ch/ora/plsql/coll/return_table.html

如您所见,该函数返回一个“表”,我需要创建一个包含要返回的字段的新对象类型。我的问题是我不想预先定义对象类型,因为我想创建可以生成任何表的通用函数。

有什么想法吗?!!

【问题讨论】:

“生成任何表”是什么意思?您想即时创建和构建嵌套表集合吗? 【参考方案1】:

我会强烈怀疑您不想这样做。在 PL/SQL 中动态创建对象类型和构建这种灵活性几乎总是会导致失败。你最终会在任何地方(在调用者和你的函数中)编写极其复​​杂的动态 SQL,这将使你的代码更难阅读和调试。当您的代码变得如此复杂时,您最好编写生成代码的框架,但这会给您留下更难的问题,即编写生成解决问题的代码的代码,而不仅仅是编写解决问题的代码。

也就是说,如果你真的、真的有决心,就有可能建立一个completely generic pipelined table function。这涉及使用 Oracle Data Cartridge 框架的一些深奥的魔法。这很酷。但是真正能够支持和扩展这种代码的人却很少。

使用稍微少一点的魔法(但仍然远远超过我对几乎任何组织的建议),您可以构建一个依赖于从预定义类型层次结构返回类型的flexible pipelined table function。这更有可能是可支持的,但它假定您可以预先构建类型层次结构。

【讨论】:

+1 用于指向 Data Cartridge 框架的链接。当我第一次看到 Tom 在他的“STRAGG”方法中使用它时,我一直想知道它是什么。

以上是关于从 PL/SQL 函数返回一个“表”(没有预定义列名)的主要内容,如果未能解决你的问题,请参考以下文章

使用 JDBC 从 PL/SQL 存储函数中获取表返回值

从 PL/SQL 函数返回表 - 不正确的数据类型

带有参数的 PL/SQL 过程/函数从选择查询返回表

返回表查询的 PL/SQL 封装函数

如何从 Oracle PL/SQL 函数中返回现有表中的记录?

从 PL/SQL 中的查询加硬编码变量返回用户定义的表