2

这可能是一个愚蠢的问题,但由于 oracle 允许创建不同对象的表,我认为也许可以创建一个视图表。

我需要生成很多很多视图(这将旋转一些表)。每个视图都有不同的列名。我不想用成百上千个名为 schema.xls_import_id_1234_sheet_0.

是否可以创建视图表?然后用类似的东西查询它们

select * from table(
    select a_view from xls_sheet_views where xls_id = 1234 and sheet_no = 0)

或者可能是一种将查询存储为 varchar2 类型的方法,以及某种自动执行它的方法?

4

1 回答 1

4

不,您不能创建视图表。

根据您尝试解决的确切业务问题,您可能可以在包中的流水线表函数中实现逻辑,而不是拥有数千个视图。如果您有这么多视图,因为您要为每个可能透视的属性组合创建一个单独的对象,那么使用接受一些参数而不是拥有数百个视图的流水线表函数可能是有意义的。或者,在一个包中包含一些返回SYS_REFCURSOR.

一般来说,如果你想使用流水线表函数,你会想知道结果的结构。但是,通过在 Oracle 对象类型中使用多态性,您可能会变得很棘手。您可以声明单个对象类型,派生多个子类型,然后从父类型上定义的流水线表函数返回子类型的实例。Adrian Billington 有一个很好的例子来说明这种灵活的流水线表函数。但是,您可以使用 Data Cartridge 框架变得更疯狂,并开发一个返回任意结构化结果的流水线表函数。现在,只是因为你可以做这样的事情,如果没有经过深思熟虑,我当然不会提倡实际这样做。对于像旋转某些数据这样常见的事情,需要这种级别的动态代码会让我强烈怀疑您需要退后一步,看看系统的架构。

于 2013-04-19T08:45:31.750 回答