【问题标题】:Is it possible to create a table of views in oracle是否可以在 oracle 中创建视图表
【发布时间】:2013-04-19 08:21:58
【问题描述】:

这可能是一个愚蠢的问题,但由于 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 类型的方法,以及某种自动执行它的方法?

【问题讨论】:

    标签: oracle


    【解决方案1】:

    不,您不能创建视图表。

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

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

    【讨论】:

    • 您能否详细说明如何在不指定显式返回行类型的情况下定义流水线函数?
    猜你喜欢
    • 2019-08-23
    • 1970-01-01
    • 2017-10-23
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2020-07-13
    相关资源
    最近更新 更多