※SEQUENCE
其他的資料庫有自動流水號的功能,而Oracle在11g(含)之前都沒有,之前都一直用這個Sequence※增刪改查
CREATE SEQUENCE xxx; CREATE SEQUENCE ooo START WITH 5; CREATE SEQUENCE zzz START WITH -5 MINVALUE -2000; CREATE SEQUENCE yyy INCREMENT BY -2000; CREATE SEQUENCE aaa MAXVALUE 2000 MINVALUE 1 INCREMENT BY 40 CACHE 48 CYCLE; ALTER SEQUENCE aaa MAXVALUE 2500; DROP SEQUENCE aaa; SELECT xxx.NEXTVAL from dual; SELECT ooo.NEXTVAL from dual; SELECT zzz.CURRVAL from dual; SELECT * from USER_SEQUENCES
※設定完用NEXTVAL和CURRVAL,可以得知下一個和目前的sequence是多少,但剛創建完一定要執行過NEXTVAL後,才能執行CURRVAL
※選項
官方文件:創建、修改、刪除可以得知創建總共有16種選項,修改有15種(少了創建的START WITH)
以下的預設值沒特別寫就是NOxxx:
START WITH:這個選項ALTER沒有,是設定初始值的,當然不會有
預設值正數是MINVALUE,負數是MAXVALUE
INCREMENT BY:一次增加多少,正數往上增加;負數往下,預設是1
MAXVALUE/NOMAXVALUE:設定最大值,預設是10的28次方減1
MINVALUE/NOMINVALUE:設定最小值,預設是0,可以設到10的27次方減1
CYCLE/NOCYCLE:要不要循環,不環循到臨界點的時候就會出錯誤訊息
CACHE/NOCACHE:預設是20,用完了再去資料庫要20,最主要是要降低和資料庫字典要值的次數,可以增加效能
以下六個我無法理解:
ORDER/NOORDER
KEEP/NOKEEP
SESSION/GLOBAL:預設是GLOBAL
※注意
設定CACHE容易出現的錯誤:CREATE SEQUENCE aaa MAXVALUE 2000 MINVALUE -200 INCREMENT BY -40 CACHE 48 CYCLE;
如果沒設定好會出「ORA-04013: 要放到 CACHE 中的數目必須小於一個循環週期」的錯
官方有個公式(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)
如果CACHE大於這個數字就會報這個錯(等於不會)
CEIL是天花板,就是往上(正數);ABS就是絕對值(絕對是正數的值)
以這個例子就是
(CEIL(2000-(-200))) / ABS(-40)
2200/40 = 55
所以只要CACHE設定超過55就會報這個錯
※流水號
流水號終於在12c這一版增加了CREATE TABLE t1 ( id NUMBER GENERATED AS IDENTITY, name VARCHAR2(10) ); CREATE TABLE t2 ( id NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 10), name VARCHAR2(10) );
※第一條SQL是不加選項,什麼都用預設的
※要加選項就用第二條SQL
※INDEX
官網連結主要是加快查詢速度用的
語法:
CREATE [UNIQUE|BITMAP] INDEX INDEX ON 表(欄[,欄...]) [USABLE|UNUSABLE]
最後面什麼都不打,預設是USABLE,表示可以用的意思
使用sys登入後,下「SET AUTOTRACE ON;」(要關掉改OFF即可)
※要注意每次執行完SQL語句都要按一次上面的按鈕才會更新
※如果用sqlplus,還可以看到更詳細的資訊,如時間…等
※執行最後一條SQL後,紅框的FULL會變成ROWID,ROWID是效能最快的;FULL指的是一行一行去掃描
※由於INDEX在工作時,我從來沒用過,不知會出什麼問題,只能提供官網連結(上面有提供了),拉到最下面也有很多範例,還有一個我覺得寫的很好的文章
※如要刪除,就下「DROP INDEX index名稱」
沒有留言:
張貼留言