我目前正在使用hr scheme(EMP,DEPT Table)尝试updatable_join_view。
我尝试加入名为emp和dept的表。我也是这样看的。
create or replace view v4
as
select e.empno, e.ename, d.dname, d.loc
from emp e, dept d
where e.deptno = d.deptno;
所以,我在上面做了这样的观点,作为连接视图,e.empno列上只有一个约束为 not null 。
在此之后,如果我尝试使用此代码,
select *
from user_updatable_columns
where table_name = 'V4';
我可以看到这样的
OWNER TABLE_NAME COLUMN_NAM UPDATA INSERT DELETA
---------- ---------- ---------- ------ ------ ------
ACE24 V4 EMPNO NO NO NO
ACE24 V4 ENAME NO NO NO
ACE24 V4 DNAME NO NO NO
ACE24 V4 LOC NO NO NO
为了制作可更新的连接视图,我在e.empno上添加了主键约束,以便可以保留密钥。
alter table emp
add constraint empno_pk primary key(empno);
所以,我希望我可以在dept表的dname,loc列上更新或插入或删除。但我仍然可以找到这个结果。
OWNER TABLE_NAME COLUMN_NAM UPDATA INSERT DELETA
---------- ---------- ---------- ------ ------ ------
ACE24 V4 EMPNO NO NO NO
ACE24 V4 ENAME NO NO NO
ACE24 V4 DNAME NO NO NO
ACE24 V4 LOC NO NO NO
我想知道这是什么问题。
答案 0 :(得分:0)
唯一约束需要在父级上,以便数据库知道查找不会创建重复项。
alter table dept add constraint dept_pk primary key (deptno);
alter view v4 compile;
然后我得到:
OWNER TABLE_NAME COLUMN_NAME UPDATABLE INSERTABLE DELETABLE
------------- ------------- ------------- --------- ---------- ---------
DSL_OWNER_82 V4 EMPNO YES YES YES
DSL_OWNER_82 V4 ENAME YES YES YES
DSL_OWNER_82 V4 DNAME NO NO NO
DSL_OWNER_82 V4 LOC NO NO NO