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;
圖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