oracle:物化视图中的主键列
Posted
技术标签:
【中文标题】oracle:物化视图中的主键列【英文标题】:oracle: primary key column in a materialized view 【发布时间】: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;
【问题讨论】:
为什么不组合唯一列来创建复合主键? 为什么需要视图?一个垫子视图可以有子查询。 【参考方案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 ;
【讨论】:
以上是关于oracle:物化视图中的主键列的主要内容,如果未能解决你的问题,请参考以下文章