视图是基于一张表或者另一张视图的逻辑表。 视图本身不包含数据。视图被存储在数据字典中。

授权:
SQL>
SQL> conn / as sysdba
Connected.
SQL>
SQL> grant create view to scott;
grant create view to scott*
ERROR at line 1:
ORA-01917: user or role 'SCOTT' does not existSQL> show con_name;CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=PDB1;Session altered.SQL> grant create view to scott;Grant succeeded.SQL> conn scott/tiger
ERROR:
ORA-01017: invalid username/password; logon deniedWarning: You are no longer connected to ORACLE.
SQL> conn scott/tiger@PDB1;
Connected.
SQL>
SQL> select * from session_privs;PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
SET CONTAINER12 rows selected.SQL>
SQL> show con_name;CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=PDB1;Session altered.SQL> conn scott/tiger@PDB1;
Connected.
SQL>
SQL>
SQL> select * from session_privs;PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPEPRIVILEGE
----------------------------------------
SET CONTAINER12 rows selected.SQL> create view vu102 as3 select empno,ename,sal,deptno from emp where deptno = 10;View created.SQL> set pagesize 200
SQL> set linesize 200
SQL>
SQL> select * from vu10;EMPNO ENAME SAL DEPTNO
---------- ---------- ---------- ----------7782 CLARK 2450 107839 KING 5000 107934 MILLER 1300 10SQL> create or replace view vu102 as3 select empno,ename,hiredate,sal,deptno from emp where deptno = 10;View created.SQL> select * from vu10;EMPNO ENAME HIREDATE SAL DEPTNO
---------- ---------- --------- ---------- ----------7782 CLARK 09-JUN-81 2450 107839 KING 17-NOV-81 5000 107934 MILLER 23-JAN-82 1300 10SQL> SQL>
SQL> create or replace view vu10(employee_id,first_name,hire_date,salary,department_id)2 as3 select empno,ename,hiredate,sal,deptno from emp where deptno = 10;View created.SQL> select * from vu10;EMPLOYEE_ID FIRST_NAME HIRE_DATE SALARY DEPARTMENT_ID
----------- ---------- --------- ---------- -------------7782 CLARK 09-JUN-81 2450 107839 KING 17-NOV-81 5000 107934 MILLER 23-JAN-82 1300 10SQL>
SQL>
SQL> create or replace view vu202 as3 select empno,ename,hiredate,sal,deptno from e05 where deptno = 20;
select empno,ename,hiredate,sal,deptno from e05 where deptno = 20*
ERROR at line 3:
ORA-00942: table or view does not existSQL> desc vu20
ERROR:
ORA-04043: object vu20 does not existSQL> create or replace force view vu202 as3 select empno,ename,hiredate,sal,deptno from e05 where deptno = 20;Warning: View created with compilation errors.SQL>
SQL> desc vu20
ERROR:
ORA-24372: invalid object for describeSQL> create table e05 as select * from emp;Table created.SQL> desc vu20;Name Null? Type----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------EMPNO NUMBER(4)ENAME VARCHAR2(10)HIREDATE DATESAL NUMBER(7,2)DEPTNO NUMBER(2)SQL>
SQL> select * from vu20;EMPNO ENAME HIREDATE SAL DEPTNO
---------- ---------- --------- ---------- ----------7369 SMITH 17-DEC-80 800 207566 JONES 02-APR-81 2975 207788 SCOTT 24-JAN-87 3000 207876 ADAMS 02-APR-87 1100 207902 FORD 03-DEC-81 3000 20SQL>
SQL> select * from tab;TNAME TABTYPE CLUSTERID
-------------------------------------------------------------------------------------------------------------------------------- ------------- ----------
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE
T01 TABLE
E01 TABLE
E02 TABLE
DETAIL_DEPT TABLE
T03 TABLE
VU10 VIEW
VU20 VIEW
E05 TABLE12 rows selected.SQL> select text from user_views where view_name='VU20';TEXT
--------------------------------------------------------------------------------
select empno,ename,hiredate,sal,deptno from e05 where deptno = 20SQL> select * from (select empno,ename,hiredate,sal,deptno from e05 where deptno = 20);EMPNO ENAME HIREDATE SAL DEPTNO
---------- ---------- --------- ---------- ----------7369 SMITH 17-DEC-80 800 207566 JONES 02-APR-81 2975 207788 SCOTT 24-JAN-87 3000 207876 ADAMS 02-APR-87 1100 207902 FORD 03-DEC-81 3000 20SQL>
SQL> insert into vu20 values(1,'tom',sysdate,1200,10);1 row created.SQL> select * from vu20;EMPNO ENAME HIREDATE SAL DEPTNO
---------- ---------- --------- ---------- ----------7369 SMITH 17-DEC-80 800 207566 JONES 02-APR-81 2975 207788 SCOTT 24-JAN-87 3000 207876 ADAMS 02-APR-87 1100 207902 FORD 03-DEC-81 3000 20SQL> select * from vu10;EMPLOYEE_ID FIRST_NAME HIRE_DATE SALARY DEPARTMENT_ID
----------- ---------- --------- ---------- -------------7782 CLARK 09-JUN-81 2450 107839 KING 17-NOV-81 5000 107934 MILLER 23-JAN-82 1300 10SQL> select * from e05;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------7369 SMITH CLERK 7902 17-DEC-80 800 207499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 307521 WARD SALESMAN 7698 22-FEB-81 1250 500 307566 JONES MANAGER 7839 02-APR-81 2975 207654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 307698 BLAKE MANAGER 7839 01-MAY-81 2850 307782 CLARK MANAGER 7839 09-JUN-81 2450 107788 SCOTT ANALYST 7566 24-JAN-87 3000 207839 KING PRESIDENT 17-NOV-81 5000 107844 TURNER SALESMAN 7698 08-SEP-81 1500 0 307876 ADAMS CLERK 7788 02-APR-87 1100 207900 JAMES CLERK 7698 03-DEC-81 950 307902 FORD ANALYST 7566 03-DEC-81 3000 207934 MILLER CLERK 7782 23-JAN-82 1300 101 tom 7001 tom 17-NOV-22 1200 1016 rows selected.SQL> roll
Rollback complete.
SQL> select * from e05;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------7369 SMITH CLERK 7902 17-DEC-80 800 207499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 307521 WARD SALESMAN 7698 22-FEB-81 1250 500 307566 JONES MANAGER 7839 02-APR-81 2975 207654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 307698 BLAKE MANAGER 7839 01-MAY-81 2850 307782 CLARK MANAGER 7839 09-JUN-81 2450 107788 SCOTT ANALYST 7566 24-JAN-87 3000 207839 KING PRESIDENT 17-NOV-81 5000 107844 TURNER SALESMAN 7698 08-SEP-81 1500 0 307876 ADAMS CLERK 7788 02-APR-87 1100 207900 JAMES CLERK 7698 03-DEC-81 950 307902 FORD ANALYST 7566 03-DEC-81 3000 207934 MILLER CLERK 7782 23-JAN-82 1300 101 tom 70015 rows selected.SQL> create or replace force view vu202 as3 select empno,ename,hiredate,sal,deptno from e05 where deptno = 204 with check option;View created.SQL> insert into vu20 values(1,'tom',sysdate,1200,10);
insert into vu20 values(1,'tom',sysdate,1200,10)*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violationSQL> insert into vu20 values(1,'tom',sysdate,1200,20);1 row created.SQL>

DROP VIEW VIEW_NAME;
SQL> drop view vu20;View dropped.SQL>
SQL> alter session set container=PDB1;Session altered.SQL> grant connect,resource to pstest identified by pstest;Grant succeeded.SQL> conn pstest/pstest@PDB1;
Connected.
SQL>
SQL>
另一个用户下授予pstest 访问某个视图的权限
SQL>
SQL> grant select on vu10 to pstest;Grant succeeded.SQL>
SQL> select * from scott.vu10;EMPLOYEE_ID FIRST_NAME HIRE_DATE SALARY DEPARTMENT_ID
----------- ---------- --------- ---------- -------------7782 CLARK 09-JUN-81 2450 107839 KING 17-NOV-81 5000 107934 MILLER 23-JAN-82 1300 10SQL> show user;
USER is "PSTEST"
SQL>
SQL>
SQL>
SQL> select * from (select ename,sal from emp order by sal desc);ENAME SAL
---------- ----------
KING 5000
FORD 3000
SCOTT 3000
JONES 2975
BLAKE 2850
CLARK 2450
ALLEN 1600
TURNER 1500
MILLER 1300
WARD 1250
MARTIN 1250
ADAMS 1100
JAMES 950
SMITH 800
tom 70015 rows selected.SQL> create or replace view vutest as select ename,sal from emp order by sal desc;View created.SQL> select * from vutest;ENAME SAL
---------- ----------
KING 5000
FORD 3000
SCOTT 3000
JONES 2975
BLAKE 2850
CLARK 2450
ALLEN 1600
TURNER 1500
MILLER 1300
WARD 1250
MARTIN 1250
ADAMS 1100
JAMES 950
SMITH 800
tom 70015 rows selected.SQL>
下一篇:描述生命力的句子