Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle-如何使用用户个性化数据创建视图_Oracle - Fatal编程技术网

Oracle-如何使用用户个性化数据创建视图

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

如何创建仅为已登录用户存储数据的视图: 这不起作用:不允许对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.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语句的用户,还是拥有具体化视图的用户?