1.知识点:能够对比以下的录屏进行阅读
视图,序列,索引,同义词
SQL> --视图:虚表
SQL> --视图的长处:简化复杂查询。限制数据訪问(银行用的多)。提供数据的相互独立。相同的数据能够有不同的显示方式
SQL> --第一个视图: 员工号 姓名 月薪 年薪
SQL> create view view1
2 as
3 select empno,ename,sal,sal*12 annlsal from emp;
SQL> --假设显示没有权限,则须要授权,见下图1-1 SQL> --复杂视图
SQL> create or replace view view2 --假设view2存在就替换,否则就创建
2 as
3 select empno,ename,sal,sal*12 annlsal,dname
4 from emp e, dept d
5 where e.deptno=d.deptno
6 with read only; --仅仅读视图 SQL> --序列sequence
SQL> create sequence myseq; SQL> --插入数据
SQL> insert into testseq values(myseq.NEXTVAL,'aaa'); SQL> --序列不连续:
SQL> --1. 内存,长度20
SQL> --2. 序列是一个公有对象
SQL> --3. rollback SQL> --创建索引表
SQL> --create index myindex on emp(deptno); SQL> --同义词,即为别名
SQL> --为hr.EMPLOYEES起别名
SQL> create SYNONYM hremp for hr.EMPLOYEES;
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdjEyMzQxMTczOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
图1-1给scott授权
2.在Sqlplus下实际运行的结果录屏
SQL> host cls SQL> --视图
SQL> --第一个视图: 员工号 姓名 月薪 年薪
SQL> create view view1
2 as
3 select empno,ename,sal,sal*12 annlsal from emp;
create view view1
*
第 1 行出现错误:
ORA-01031: 权限不足 SQL> / 视图已创建。 SQL> desc view1
名称 是否为空? 类型
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
SAL NUMBER(7,2)
ANNLSAL NUMBER SQL> select * from view1; EMPNO ENAME SAL ANNLSAL
---------- ---------- ----- ----------
7369 SMITH 800 9600
7499 ALLEN 1600 19200
7521 WARD 1250 15000
7566 JONES 2975 35700
7654 MARTIN 1250 15000
7698 BLAKE 2850 34200
7782 CLARK 2450 29400
7788 SCOTT 3000 36000
7839 KING 5000 60000
7844 TURNER 1500 18000
7876 ADAMS 1100 13200 EMPNO ENAME SAL ANNLSAL
---------- ---------- ----- ----------
7900 JAMES 950 11400
7902 FORD 3000 36000
7934 MILLER 1300 15600 已选择14行。 SQL> create view view2
2 as
3 select empno,ename,sal,sal*12 annlsal,dname
4 from emp e, dept d
5 where e.deptno=d.deptno; 视图已创建。 SQL> select * from view2; EMPNO ENAME SAL ANNLSAL DNAME
---------- ---------- ----- ---------- --------------
7369 SMITH 800 9600 RESEARCH
7499 ALLEN 1600 19200 SALES
7521 WARD 1250 15000 SALES
7566 JONES 2975 35700 RESEARCH
7654 MARTIN 1250 15000 SALES
7698 BLAKE 2850 34200 SALES
7782 CLARK 2450 29400 ACCOUNTING
7788 SCOTT 3000 36000 RESEARCH
7839 KING 5000 60000 ACCOUNTING
7844 TURNER 1500 18000 SALES
7876 ADAMS 1100 13200 RESEARCH EMPNO ENAME SAL ANNLSAL DNAME
---------- ---------- ----- ---------- --------------
7900 JAMES 950 11400 SALES
7902 FORD 3000 36000 RESEARCH
7934 MILLER 1300 15600 ACCOUNTING 已选择14行。 SQL> create or replace view view2
2 as
3 select empno,ename,sal,sal*12 annlsal,dname
4 from emp e, dept d
5 where e.deptno=d.deptno
6 with read only; 视图已创建。 SQL> host cls SQL> --序列sequence
SQL> create sequence myseq; 序列已创建。 SQL> create table testseq
2 (tid number,tname varchar2(20)); 表已创建。 SQL> select myseq.CURRVAL from dual;
select myseq.CURRVAL from dual
*
第 1 行出现错误:
ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义 SQL> select myseq.NEXTVAL from dual; NEXTVAL
----------
1 已选择 1 行。 SQL> / NEXTVAL
----------
2 已选择 1 行。 SQL> select myseq.CURRVAL from dual; CURRVAL
----------
2 已选择 1 行。 SQL> insert into testseq values(myseq.NEXTVAL,'aaa'); 已创建 1 行。 SQL> / 已创建 1 行。 SQL> / 已创建 1 行。 SQL> commit; 提交完毕。 SQL> select * from testseq; TID TNAME
---------- --------------------
3 aaa
4 aaa
5 aaa 已选择3行。 SQL> insert into testseq values(myseq.NEXTVAL,'aaa'); 已创建 1 行。 SQL> / 已创建 1 行。 SQL> rollback; 回退已完毕。 SQL> insert into testseq values(myseq.NEXTVAL,'aaa'); 已创建 1 行。 SQL> select * from testseq; TID TNAME
---------- --------------------
3 aaa
4 aaa
5 aaa
8 aaa 已选择4行。 SQL> /*
SQL> 序列不连续:
SQL> 1. 内存。长度20
SQL> 2. 序列是一个公有对象
SQL> 3. rollback序列不连续:
SQL> 1. 内存,长度20
SQL> 2. 序列是一个公有对象
SQL> 3. rollback
SQL> */
SQL> host cls SQL> --同义词
SQL> show user
USER 为 "SCOTT"
SQL> select count(*) from hr.EMPLOYEES;
select count(*) from hr.EMPLOYEES
*
第 1 行出现错误:
ORA-00942: 表或视图不存在 SQL> / COUNT(*)
----------
107 已选择 1 行。 SQL> --为hr.EMPLOYEES起别名
SQL> create SYNONYM hremp for hr.EMPLOYEES;
create SYNONYM hremp for hr.EMPLOYEES
*
第 1 行出现错误:
ORA-01031: 权限不足 <span style="white-space:pre"> </span> SQL> / 同义词已创建。 SQL> select count(*) from hremp; COUNT(*)
----------
107 已选择 1 行。 SQL> spool off