【问题标题】:oracle: primary key column in a materialized vieworacle:物化视图中的主键列
【发布时间】:2018-09-14 17:34:31
【问题描述】:

任务是在某个唯一列上创建具有主键的物化视图,以便可以将物化视图复制到另一个数据库。问题是没有唯一的列,因为我必须连接大量的表,所以我不能使用连接表中的 ID,因为它们在我的物化视图中不再是唯一的。

首先我要创建一个视图,因为select里面有子查询:

CREATE VIEW V_CONTRACTS
AS

SELECT 
     ID.NEXTVAL,
     C.*
FROM (SELECT <lots of columns>
      FROM CONTRACT
      <lots of joins>
      WHERE <some filters>) C
;

但是报错了:

ORA-02287: sequence number not allowed here

然后我将物化视图创建为:

CREATE MATERIALIZED VIEW CONTRACTS
AS
SELECT * FROM V_CONTRACTS;

【问题讨论】:

  • 为什么不组合唯一列来创建复合主键?
  • 为什么需要视图?一个垫子视图可以有子查询。

标签: oracle


【解决方案1】:

您可以使用 ROW_NUMBER 分析函数为您提供一个数字列。

CREATE VIEW V_TEST
AS

SELECT 
     ROW_NUMBER() OVER ( ORDER BY col1 , col2 ) as idx,
     C.*
FROM ( SELECT 'A' as col1, 'B' as col2 FROM DUAL
       UNION
       SELECT 'C' as col1, 'D' as col2 FROM DUAL
       UNION
       SELECT 'E' as col1, 'F' as col2 FROM DUAL
     ) C ;

CREATE MATERIALIZED VIEW mv_test
AS     
SELECT * FROM V_TEST ;   

SELECT * FROM mv_test ;

【讨论】:

    猜你喜欢
    • 2018-02-27
    • 2021-01-15
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2018-08-24
    • 1970-01-01
    相关资源
    最近更新 更多