从PL / SQL函数返回'表'(没有预定义列名)

时间:2014-10-09 18:37:37

标签: sql oracle plsql

有关您的信息,我的问题基于此网络教程http://www.adp-gmbh.ch/ora/plsql/coll/return_table.html

正如您所看到的,该函数会返回一个'表格'我需要创建一个新的对象类型,其中包含将要返回的字段。我的问题是我不想预先定义对象类型,因为我想创建可以生成任何表的泛型函数。

有什么想法吗?!!

1 个答案:

答案 0 :(得分:4)

我会强烈怀疑你不想这样做。动态创建对象类型并在PL / SQL中构建这种灵活性几乎总是一种破坏的方法。您最终会在任何地方(包括调用者和函数中)编写极其复​​杂的动态SQL,这将使您的代码更难以阅读和调试。当您的代码变得那么复杂时,您最好编写生成代码的框架,但这会让您遇到编写代码的更难,更难的问题,这些代码可以解决您的问题,而不仅仅是编写解决问题的代码

那就是说,如果你真的,真的有决心,那就有可能建立一个completely generic pipelined table function。这涉及使用Oracle Data Cartridge框架的一些深刻,深刻的魔法。这很酷。但实际支持和扩展此类代码的人数非常少。

稍微少一点魔法(但仍然比我对几乎所有组织的建议都要多),你可以构建一个依赖于从预定义类型层次结构中返回类型的flexible pipelined table function。这更可能是可支持的,但它假设您可以预先构建类型层次结构。