一、Note
1、概念
- 视图(View)是由 SELECT 查询语句定义的一个“逻辑表”
- 视图(View)只有定义而无数据,是一个"虚表",是反映了它所依赖的表的数据
- 视图是一个或多个表(或视图)经过 SELECT 查询后选择的逻辑表示,是一个逻辑上的表,依赖于其它表(或其他视图)存在
- (视图可依赖于视图,且可以基于视图创建视图)
- 创建视图时所用的表(或视图)被称作 基础表(Base Table)
2、视图与表类似
- 视图名称 与 表名称 类似
- 视图中列的名称、类型、宽度 与 表中相同
- 视图中可以定义约束条件
- 视图上也可以执行DML操作(INSERT|UPDATE|DELETE)
- 表和视图都不允许有重复的列名(表连接时的列名重复不算)
- 因此,要么在创建视图时显式指定视图的属性列名,要么在创建视图的select语句中定义列的别名
3、注意列名
-
组成视图的属性列名要么全部忽略要么全部指定,如果省略了视图的各个属性列名,则该视图的列名为子查询中select子句目标列中的列名
-
有三种情况必须显式指定视图的列名或在select子句中定义列的别名
- 某个目标列不是单纯的属性名,而是统计函数或列表达式
- 多表连接时选出了几个同名列作为视图的列
- 需要在视图为某个列启用新的名称
4、使用目的
- 提供各种数据表现形式
- 提高某些安全性保证
- 隐藏数据的逻辑复杂性并简化查询语句
- 执行某些必须使用视图的查询
- 简化用户权限的管理
5、创建视图
-
语法
-
CREATE [OR REPLACE] [FORCE] VIEW 视图名称[ (列名 , ...) ] AS 查询语句 [ WITH CHECK OPTION ]
-
create:不进行判断,若数据库中已存在相同视图名的视图,则报错,原因是对象已存在
-
create or replace:进行判断,若数据库中已存在这个名字的视图,就替代它,若不存在则创建视图
-
表也可以用create or replace来创建
-
force:创建视图失败时,强制创建视图
-
不加with check option后,向视图中insert的数据会直接加入表中,不受约束
-
-
步骤
- 编写查询语句
- 测试查询语句
- 检查查询结果的正确性
- 使用查询语句创建视图
-
权限
- 在当前用户中创建视图需要具有 CREATE VIEW 权限
6、查看用户的视图信息
-
通过
user_objects
数据字典查看 -
通过
user_views
数据字典查看user_views
中的text
列是long类型(可达2G),存储着视图里的select查询语句,注意text列是长的文本数据,不是java中的数值类型
-
创建视图后,可以在
user_objects
数据字典找到视图这一数据库对象,若没创建则找不到 -
查询信息可知,视图和表、索引一样,都有状态
7、使用视图
-
通常使用视图完成查询操作
-
有时也会借助视图实现DML操作
- 视图中的数据DML后,对应的基础表数据也会DML
-
针对一个基础表创建的视图,可以进行DML操作
-
针对多个基础表创建的视图,不可以进行DML操作
8、删除视图
-
语法
DROP VIEW 视图名称 ;
-
权限
- 在当前用户中删除视图需要具有 DROP VIEW 权限
-
可删除不需要的视图以释放存储空间
-
视图删除后,只会删除视图在数据库中的定义,而与视图有关的数据表中的数据不会受到影响,同时由此视图导出的其他视图仍然存在,但已无意义
-
即删除视图后,基础表仍然存在
二、Code
视图:创建视图/使用视图/查看视图/删除视图
-
视图进行DML操作时,看起来是视图中的数据DML了,但数据其实是按照视图映射的那几列,重新DML操作了基础表
-
先赋予用户创建视图的权限:
GRANT create view TO ecuter ;
-
再创建视图:
CREATE VIEW view_emp (id , name , job , salary) AS SELECT empno , ename , job , sal FROM emp ;
-
尝试 向 视图view_emp 中插入数据
INSERT INTO view_emp ( id , name , job , salary ) VALUES ( 1 , 'tom' , 'clerk' , 1000 ) ;
-
查看创建视图时使用的表 ( 也就是视图对应的基础表 )
SELECT * FROM emp ;
-
更新视图(基础表的数据也会更新)
UPDATE view_emp SET salary = 1500 WHERE id = 1 ;
-
删除视图的某条记录(基础表的记录也被删除)
DELETE FROM view_emp WHERE id = 1 ;
-
删除视图(基础表仍然存在)
DROP VIEW view_emp ;
-
查询每个雇员的工号、姓名、岗位、部门名称、上司的工号、姓名、岗位、部门名称;不统计没有部门的雇员、不统计没有员工的部门
SELECT e.empno , e.ename , e.job , de.dname , m.empno , m.ename , m.job , dm.dname FROM emp e JOIN emp m ON e.mgr = m.empno JOIN dept de ON e.deptno = de.deptno JOIN dept dm ON e.deptno = dm.deptno ; -- 把两张表当四张表使用
-
通过视图简化以上查询
-- 视图中不能有重复的列名 CREATE VIEW view_emp_dept ( emp_id , emp_name , emp_job , emp_dname , mgr_id , mgr_name , mgr_job , mgr_dname ) AS SELECT e.empno , e.ename , e.job , de.dname , m.empno , m.ename , m.job , dm.dname FROM emp e JOIN emp m ON e.mgr=m.empno JOIN dept de ON e.deptno = de.deptno JOIN dept dm ON m.deptno = dm.deptno ;
-
以后要是再需要完成这么高难度的查询,就可以查询 view_emp_dept 视图了
SELECT * FROM view_emp_dept ;
控制台下的具体sql代码:
SQL>
SQL> -- 用户所有的数据库对象都可以通过查询 user_objects 来查看
SQL>
SQL> -- 单独查询用户的表可以查看 user_tables
SQL>
SQL> -- 单独查询用户的索引可以查看 user_indexes
SQL>
SQL> -- 单独查询用户的约束可以查看 user_constraints 、user_cons_columns
SQL>
SQL> -- 单独查询用户的视图可以查看 user_views
SQL>
SQL>
SQL> -- 创建视图
SQL>
SQL> set linesize 150 ;
SQL> SELECT * FROM emp ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 09-12月-82 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 12-1月 -83 1100 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
9257 HUA'AN CLERK 7839 23-1月 -85 1300
8526 QIU'XIANG ANALYST 7839 23-1月 -85 1400
已选择16行。
SQL> SELECT * FROM dept ;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
SQL> SELECT empno , ename , job , sal FROM emp ;
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500
7876 ADAMS CLERK 1100
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
7934 MILLER CLERK 1300
9257 HUA'AN CLERK 1300
8526 QIU'XIANG ANALYST 1400
已选择16行。
SQL> CREATE VIEW view_emp ( id , name , job , salary ) AS SELECT empno , ename , job , sal FROM emp ;
CREATE VIEW view_emp ( id , name , job , salary ) AS SELECT empno , ename , job , sal FROM emp
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> connect sys / as sysdba
已连接。
SQL> show user ;
USER 为 "SYS"
SQL> GRANT create view TO ecuter ;
授权成功。
SQL> connect ecuter/ecuter
已连接。
SQL> show user ;
USER 为 "ECUTER"
SQL> CREATE VIEW view_emp ( id , name , job , salary ) AS SELECT empno , ename , job , sal FROM emp ;
视图已创建。
SQL>
SQL> DESC view_emp ;
名称 是否为空? 类型
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
ID NOT NULL NUMBER(4)
NAME VARCHAR2(10)
JOB VARCHAR2(9)
SALARY NUMBER(7,2)
SQL>
SQL> SELECT * FROM view_emp ;
ID NAME JOB SALARY
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500
7876 ADAMS CLERK 1100
ID NAME JOB SALARY
---------- ---------- --------- ----------
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
7934 MILLER CLERK 1300
9257 HUA'AN CLERK 1300
8526 QIU'XIANG ANALYST 1400
已选择16行。
SQL>
SQL>
SQL> -- 尝试 向 视图view_emp 中插入数据
SQL>
SQL> INSERT INTO view_emp ( id , name , job , sal ) VALUES ( 1 , 'tom' , 'clerk' , 1000 ) ;
INSERT INTO view_emp ( id , name , job , sal ) VALUES ( 1 , 'tom' , 'clerk' , 1000 )
*
第 1 行出现错误:
ORA-00904: "SAL": 标识符无效
SQL> INSERT INTO view_emp ( id , name , job , salary ) VALUES ( 1 , 'tom' , 'clerk' , 1000 ) ;
已创建 1 行。
SQL>
SQL> SELECT * FROM view_emp ;
ID NAME JOB SALARY
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500
7876 ADAMS CLERK 1100
ID NAME JOB SALARY
---------- ---------- --------- ----------
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
7934 MILLER CLERK 1300
9257 HUA'AN CLERK 1300
8526 QIU'XIANG ANALYST 1400
1 tom clerk 1000
已选择17行。
SQL> -- 查看创建视图时使用的表 ( 也就是视图对应的基础表 )
SQL>
SQL>
SQL> SELECT * FROM emp ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 09-12月-82 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 12-1月 -83 1100 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
9257 HUA'AN CLERK 7839 23-1月 -85 1300
8526 QIU'XIANG ANALYST 7839 23-1月 -85 1400
1 tom clerk 1000
已选择17行。
SQL>
SQL> -- 更新视图
SQL> UPDATE view_emp SET salary = 1500 WHERE id = 1 ;
已更新 1 行。
SQL> SELECT * FROM view_emp ;
ID NAME JOB SALARY
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500
7876 ADAMS CLERK 1100
ID NAME JOB SALARY
---------- ---------- --------- ----------
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
7934 MILLER CLERK 1300
9257 HUA'AN CLERK 1300
8526 QIU'XIANG ANALYST 1400
1 tom clerk 1500
已选择17行。
SQL> SELECT * FROM emp ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 09-12月-82 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 12-1月 -83 1100 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
9257 HUA'AN CLERK 7839 23-1月 -85 1300
8526 QIU'XIANG ANALYST 7839 23-1月 -85 1400
1 tom clerk 1500
已选择17行。
SQL> -- 删除视图的某条记录(基础表的记录也被删除)
SQL> DELETE FROM view_emp WHERE id = 1 ;
已删除 1 行。
SQL> SELECT * FROM view_emp ;
ID NAME JOB SALARY
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500
7876 ADAMS CLERK 1100
ID NAME JOB SALARY
---------- ---------- --------- ----------
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
7934 MILLER CLERK 1300
9257 HUA'AN CLERK 1300
8526 QIU'XIANG ANALYST 1400
已选择16行。
SQL> SELECT * FROM emp ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 09-12月-82 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 12-1月 -83 1100 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
9257 HUA'AN CLERK 7839 23-1月 -85 1300
8526 QIU'XIANG ANALYST 7839 23-1月 -85 1400
已选择16行。
SQL> DROP VIEW view_emp ;
视图已删除。
SQL>
SQL>
SQL> DESC view_emp ;
ERROR:
ORA-04043: 对象 view_emp 不存在
SQL> DESC emp ;
名称 是否为空? 类型
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL>
SQL>
SQL>
SQL> -- 查询每个雇员的工号、姓名、岗位、部门名称、上司的工号、姓名、岗位、部门名称
SQL> -- 不统计没有部门的雇员、也不统计没有员工的部门
SQL>
SQL> SELECT e.empno , e.ename , e.job , de.dname , m.empno , m.ename , m.job , dm.dname
2 FROM emp e
3 JOIN emp m ON e.mgr = m.empno
4 JOIN dept de ON e.deptno = de.deptno
5 JOIN dept dm ON m.deptno = dm.deptno ;
EMPNO ENAME JOB DNAME EMPNO ENAME JOB DNAME
---------- ---------- --------- -------------- ---------- ---------- --------- --------------
7566 JONES MANAGER RESEARCH 7839 KING PRESIDENT ACCOUNTING
7698 BLAKE MANAGER SALES 7839 KING PRESIDENT ACCOUNTING
7782 CLARK MANAGER ACCOUNTING 7839 KING PRESIDENT ACCOUNTING
7934 MILLER CLERK ACCOUNTING 7782 CLARK MANAGER ACCOUNTING
7369 SMITH CLERK RESEARCH 7902 FORD ANALYST RESEARCH
7876 ADAMS CLERK RESEARCH 7788 SCOTT ANALYST RESEARCH
7788 SCOTT ANALYST RESEARCH 7566 JONES MANAGER RESEARCH
7902 FORD ANALYST RESEARCH 7566 JONES MANAGER RESEARCH
7499 ALLEN SALESMAN SALES 7698 BLAKE MANAGER SALES
7521 WARD SALESMAN SALES 7698 BLAKE MANAGER SALES
7654 MARTIN SALESMAN SALES 7698 BLAKE MANAGER SALES
EMPNO ENAME JOB DNAME EMPNO ENAME JOB DNAME
---------- ---------- --------- -------------- ---------- ---------- --------- --------------
7844 TURNER SALESMAN SALES 7698 BLAKE MANAGER SALES
7900 JAMES CLERK SALES 7698 BLAKE MANAGER SALES
已选择13行。
SQL>
SQL>
SQL> -- 可以通过视图简化以上查询
SQL>
SQL> CREATE VIEW view_emp_dept AS
2 SELECT e.empno , e.ename , e.job , de.dname , m.empno , m.ename , m.job , dm.dname
3 FROM emp e JOIN emp m ON e.mgr = m.empno
4 JOIN dept de ON e.deptno = de.deptno
5 JOIN dept dm ON m.deptno = dm.deptno ;
SELECT e.empno , e.ename , e.job , de.dname , m.empno , m.ename , m.job , dm.dname
*
第 2 行出现错误:
ORA-00957: 重复的列名
SQL> CREATE VIEW view_emp_dept
2 ( emp_id , emp_name , emp_job , emp_dname , mgr_id , mgr_name , mgr_job , mgr_dname )
3 AS
4 SELECT e.empno , e.ename , e.job , de.dname , m.empno , m.ename , m.job , dm.dname
5 FROM emp e JOIN emp m ON e.mgr = m.empno JOIN dept de ON e.deptno = de.deptno JOIN dept dm ON m.deptno = dm.deptno ;
视图已创建。
SQL>
SQL>
SQL> -- 以后要是再需要完成这么高难度的查询,就可以查询 view_emp_dept 视图了
SQL>
SQL> SELECT * FROM view_emp_dept ;
EMP_ID EMP_NAME EMP_JOB EMP_DNAME MGR_ID MGR_NAME MGR_JOB MGR_DNAME
---------- ---------- --------- -------------- ---------- ---------- --------- --------------
7566 JONES MANAGER RESEARCH 7839 KING PRESIDENT ACCOUNTING
7698 BLAKE MANAGER SALES 7839 KING PRESIDENT ACCOUNTING
7782 CLARK MANAGER ACCOUNTING 7839 KING PRESIDENT ACCOUNTING
7934 MILLER CLERK ACCOUNTING 7782 CLARK MANAGER ACCOUNTING
7369 SMITH CLERK RESEARCH 7902 FORD ANALYST RESEARCH
7876 ADAMS CLERK RESEARCH 7788 SCOTT ANALYST RESEARCH
7788 SCOTT ANALYST RESEARCH 7566 JONES MANAGER RESEARCH
7902 FORD ANALYST RESEARCH 7566 JONES MANAGER RESEARCH
7499 ALLEN SALESMAN SALES 7698 BLAKE MANAGER SALES
7521 WARD SALESMAN SALES 7698 BLAKE MANAGER SALES
7654 MARTIN SALESMAN SALES 7698 BLAKE MANAGER SALES
EMP_ID EMP_NAME EMP_JOB EMP_DNAME MGR_ID MGR_NAME MGR_JOB MGR_DNAME
---------- ---------- --------- -------------- ---------- ---------- --------- --------------
7844 TURNER SALESMAN SALES 7698 BLAKE MANAGER SALES
7900 JAMES CLERK SALES 7698 BLAKE MANAGER SALES
已选择13行。
SQL> DESC view_emp_dept ;
名称 是否为空? 类型
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
EMP_ID NOT NULL NUMBER(4)
EMP_NAME VARCHAR2(10)
EMP_JOB VARCHAR2(9)
EMP_DNAME VARCHAR2(14)
MGR_ID NOT NULL NUMBER(4)
MGR_NAME VARCHAR2(10)
MGR_JOB VARCHAR2(9)
MGR_DNAME VARCHAR2(14)
SQL>
SQL> DELETE FROM view_emp_dept WHERE emp_id = 7900 ;
DELETE FROM view_emp_dept WHERE emp_id = 7900
*
第 1 行出现错误:
ORA-01752: 不能从没有一个键值保存表的视图中删除
SQL>
SQL>
SQL> -- 查看视图定义
SQL>
SQL> DESC user_views ;
名称 是否为空? 类型
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
TYPE_TEXT_LENGTH NUMBER
TYPE_TEXT VARCHAR2(4000)
OID_TEXT_LENGTH NUMBER
OID_TEXT VARCHAR2(4000)
VIEW_TYPE_OWNER VARCHAR2(30)
VIEW_TYPE VARCHAR2(30)
SUPERVIEW_NAME VARCHAR2(30)
EDITIONING_VIEW VARCHAR2(1)
READ_ONLY VARCHAR2(1)
SQL> SELECT view_name , TEXT FROM user_views ;
VIEW_NAME TEXT
------------------------------ --------------------------------------------------------------------------------
VIEW_EMP_DEPT SELECT e.empno , e.ename , e.job , de.dname , m.empno , m.ename , m.job , dm.dna
SQL> SELECT view_name , TEXT_LENGTH FROM user_views ;
VIEW_NAME TEXT_LENGTH
------------------------------ -----------
VIEW_EMP_DEPT 198
SQL> column type_text format a50 ;
SQL> SELECT view_name , type_text FROM user_views ;
VIEW_NAME TYPE_TEXT
------------------------------ --------------------------------------------------
VIEW_EMP_DEPT
SQL> SELECT view_name , view_type , read_only FROM user_views ;
VIEW_NAME VIEW_TYPE R
------------------------------ ------------------------------ -
VIEW_EMP_DEPT N
SQL> spool off