从 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 函数返回一个“表”(没有预定义列名)的主要内容,如果未能解决你的问题,请参考以下文章