我正在使用在Oracle视图中需要主键的软件。可以在Oracle视图中添加主键吗?如果有,怎么样?我不能谷歌有关此信息。
答案 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;