程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle同義詞 序列 索引 異常處理 示例分析代碼

Oracle同義詞 序列 索引 異常處理 示例分析代碼

編輯:Oracle數據庫基礎
 

一、同義詞:
語法:create [public] synonym [模式名.]同義詞 for [模式名.]表名

(以下例題使用的是scott模式下的emp表)
例1:(創建本模式下的私有同義詞)
create synonym emp for scott.emp;
例2:(創建其他模式下的私有同義詞)
create synonym system.emp for scott.emp; (創建system模式下的私有同義詞)
例3:(創建公有同義詞)
create public emp for scott.emp;

知識點:1、同義詞可以用來簡化SQL語句,但它不可以代替權限,在使用同義詞前要確保用戶已取得
訪問對象的權限。 比如:例3 中創建的公有同義詞 emp 在任何模式下都可以使用它,但如果
該模式沒有訪問 scott模式 的 emp 表的權限的話,在使用公有同義詞 emp 時是查不到數據的。
解決的方案是賦予此用戶訪問 scott模式 的 emp 表的權限:
grant all on scott.emp to 模式名

2、公有同義詞可以被所有用戶訪問,而私有同義詞只可以被特定的用戶訪問。比如: 例1 中
創建的私有同義詞只可以在創建它的用戶下使用, 而例2 中創建的私有同義詞只可以在 system
模式下訪問。

3、創建其它模式下的私有同義詞(例2)需要有 create any synonym 的權限, 可以在sys 或 system
模式下: grant create any synonym to 模式名, 相應的要刪除其他模式下的私有同義詞要有
drop any synonym 的權限。 創建公有同義詞(例3)需要有 create public synonym 的權限,刪除
公有同義詞要有 drop public synonym 的權限。 這些權限都可以在 sys 或 system模式下賦予。

4、刪除同義詞:
drop [public] synonym;

*擴充:1、可創建同名的私有同義詞和公有同義詞;
2、可創建與公有同義詞同名的對象,但不能創建與對象同名的公有同義詞;
3、查詢本模式下的所有同義詞: select * from user_synonyms;

 

二、序列:
語法: create sequence 序列名
[start with 起始值]
[increment by 增量] ----增量為正值表示是遞增序列,為負值表示是遞減序列
[maxvalue 最大值]
[minvalue 最小值]
[cycle | nocycle] ----序列達到最大(或最小)值後,是否繼續從頭開始生成值
[cache 預先緩存數 | nocache]


知識點:
1、序列用來生成唯一、連續的整數,通常用來自動生成主鍵或唯一鍵值,類似於 SQL Server 中的自增列。


2、第一次NEXTVAL返回的是初始值;隨後的NEXTVAL會自動增加你定義的INCREMENT BY值,然後返
回增加後的值。CURRVAL 總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使
用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值,所以如果你在同一個語句裡
面使用多個NEXTVAL,其值就是不一樣的。 (注:切換用戶後nextval的值仍然會從切換前處開始接著往後增長)

例1:
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加幾個
START WITH 1 -- 從1開始計數
NOMAXVALUE -- 不設置最大值
NOCYCLE -- 一直累加,不循環
CACHE 10;

SELECT emp_sequence .currval FROM DUAL;

SQL> SELECT emp_sequence.nextval FROM DUAL;

NEXTVAL
----------
1

SQL> SELECT emp_sequence.currval FROM DUAL;

CURRVAL
----------
1

 

3、 如果指定CACHE值,ORACLE就可以預先在內存裡面放置一些sequence,這樣存取的快些。cache裡
面的取完後,oracle自動再取一組到cache。 使用cache或許會跳號, 比如數據庫突然不正常down
掉(shutdown abort),cache中的sequence就會丟失. 所以可以在create sequence的時候用nocache
防止這種情況。

例2:

SQL> SELECT emp_sequence.currval FROM DUAL;

CURRVAL
----------
1

SQL> conn / as sysdba
已連接。
SQL> shutdown abort
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> conn scott/tiger
已連接。
SQL> SELECT emp_sequence.currval FROM DUAL;
SELECT emp_sequence.currval FROM DUAL
*
ERROR 位於第 1 行:
ORA-08002: 序列EMP_SEQUENCE.CURRVAL 尚未在此進程中定義

SQL> SELECT emp_sequence.nextval FROM DUAL;

NEXTVAL
----------
11

4、使用 RollBack 回滾事務時無法回滾序列的值:
例3:
SQL> SELECT emp_sequence.currval FROM DUAL;

CURRVAL
----------
1

SELECT emp_sequence.currval FROM DUAL;

CURRVAL
----------
2

 

roll back;

SELECT emp_sequence.currval FROM DUAL;

CURRVAL
----------
3


5、使用 alter 語句修改序列時無法修改start with項的值。


6、刪除序列:
drop sequence 序列名


7、查詢本模式下所有的序列:
select * from user_sequences;

 


三、視圖:
語法: create [force | noforce] view 視圖名
[ ( 別名[,別名]... ) ]
as
select 語句
[with check option] ---- 指定只能插入或更新視圖可以訪問的行
[with read only] ---- 只讀

注意: with check option 和 with read only 不可以同時使用


例1:create view view_dept
(部門編號, 部門名稱, 地址)
as
select * from scott.dept where loc in ('DALLAS', 'CHICAGO', 'BOSTON')  

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