程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle學習(十):視圖,索引,序列號,同義詞

Oracle學習(十):視圖,索引,序列號,同義詞

編輯:Oracle教程

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved