Oracle-如何使用用户个性化数据创建视图
如何创建仅为已登录用户存储数据的视图: 这不起作用:不允许对SYS关系进行查询重写Oracle-如何使用用户个性化数据创建视图,oracle,Oracle,如何创建仅为已登录用户存储数据的视图: 这不起作用:不允许对SYS关系进行查询重写 CREATE MATERIALIZED VIEW UserPerspective ENABLE QUERY REWRITE AS SELECT * FROM EMP e, DEPT d, Salgrade s WHERE e.DEPTNO = d.DEPTNO AND e.ENAME like (SELECT User FROM Dual) AND e.S
CREATE MATERIALIZED VIEW UserPerspective
ENABLE QUERY REWRITE AS
SELECT * FROM EMP e, DEPT d, Salgrade s
WHERE e.DEPTNO = d.DEPTNO
AND e.ENAME like (SELECT User FROM Dual)
AND e.Sal BETWEEN s.Losal AND s.Hisal
;
看起来我无法在视图中使用“从双用户中选择用户…”。。。如何正确操作:
AND e.ENAME like (SELECT User FROM Dual)
您可以在视图中引用用户,如so note,删除Salgrade,因为我没有该表:
CREATE VIEW V AS
SELECT e.EMPNO, e.ENAME, e.JOB, e.MGR, e.HIREDATE
, e.SAL, e.COMM, e.DEPTNO, d.DNAME, d.LOC
FROM EMP e
INNER JOIN DEPT d ON e.DEPTNO = d.DEPTNO
WHERE e.ENAME = USER;
在物化视图中,如下所示:
CREATE MATERIALIZED VIEW MV AS
SELECT e.EMPNO, e.ENAME, e.JOB, e.MGR, e.HIREDATE
, e.SAL, e.COMM, e.DEPTNO, d.DNAME, d.LOC
FROM EMP e
INNER JOIN DEPT d ON e.DEPTNO = d.DEPTNO
WHERE e.ENAME = USER;
但您不能在启用查询重写的物化视图中引用用户:
CREATE MATERIALIZED VIEW MVEQR
ENABLE QUERY REWRITE AS
SELECT e.EMPNO, e.ENAME, e.JOB, e.MGR, e.HIREDATE
, e.SAL, e.COMM, e.DEPTNO, d.DNAME, d.LOC
FROM EMP e
INNER JOIN DEPT d ON e.DEPTNO = d.DEPTNO
WHERE e.ENAME = USER;
原因:select子句引用了UID、USER、ROWNUM、SYSDATE、CURRENT_TIMESTAMP、MAXVALUE、序列号、绑定变量、相关变量、集合结果、触发器返回变量、并行表队列列、集合迭代器等。
操作:删除有问题的表达式或禁用物化视图上的“重写”选项
以下内容能满足您的需求吗
CREATE MATERIALIZED VIEW MV_II
ENABLE QUERY REWRITE AS
SELECT e.EMPNO, e.ENAME, e.JOB, e.MGR, e.HIREDATE
, e.SAL, e.COMM, e.DEPTNO, d.DNAME, d.LOC
FROM EMP e
INNER JOIN DEPT d ON e.DEPTNO = d.DEPTNO;
CREATE VIEW V_II AS
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE
, SAL, COMM, DEPTNO, DNAME, LOC
FROM MV_II
WHERE ENAME = USER;
物化意味着Oracle创建SELECT语句结果的最新副本。它无法做到这一点,因为用户会不时更改。它只保留一个副本,而且不够聪明,无法为每个用户保留一个副本。@WW您所说的听起来很合理,但Oracle允许用户以物化视图查看,请参阅我的答案。只是不能用查询重写。我不确定用户的物化视图是什么意思。@ShannonSeverance,这似乎很奇怪。那会是哪个用户?是具体化运行update语句的用户,还是拥有具体化视图的用户?