如何在Oracle视图上添加主键?

时间:2011-01-12 11:19:00

标签: oracle view primary-key

  

可能重复:
  adding primary key to sql view

我正在使用在Oracle视图中需要主键的软件。可以在Oracle视图中添加主键吗?如果有,怎么样?我不能谷歌有关此信息。

3 个答案:

答案 0 :(得分:3)

遗憾的是,SQL标准仅对基表而不是视图允许UNIQUE和PRIMARY KEY约束。 Oracle允许在物化视图上使用唯一索引,但通常不允许在视图上使用。

答案 1 :(得分:2)

我唯一想到的是使用物化视图然后在其上创建一个唯一索引:

drop materialized view tq84_mat_view;
drop table tq84_table;
create table tq84_table (
  a number,
  b number
);

create materialized view tq84_mat_view 
refresh on commit as
select 
  a,
  sum(b) sum_b
from 
  tq84_table
group by
  a;

create unique index tq84_mat_view_uix on tq84_mat_view (sum_b);

insert into tq84_table values (1, 1);
insert into tq84_table values (2, 2);
insert into tq84_table values (1, 4);

commit;

insert into tq84_table values (2, 3);

commit;
--> ORA-12008: error in materialized view refresh path
--> ORA-00001: unique constraint (SPEZMDBA.TQ84_MAT_VIEW_UIX) violated

虽然这可能很有用,但必须记住,物化视图与“普通”视图相对,占用表空间中的空间。当然,索引也需要空间。

答案 2 :(得分:-5)

这是您在视图中添加主键的方式。

CREATE OR REPLACE FORCE VIEW VU_NAME
        (
          PRIMARY_KEY, NAME_ID, ADDRESS_ID
         )
        AS 
        SELECT DISTINCT ROWNUM AS PRIMARY_KEY,
            NAME.ID UNIT_ID,
            ADDRESS_ID
        from table1;