您好,登錄后才能下訂單哦!
創建同義詞和序列
1、同義詞(synonym)
同義詞是對象的備選名稱。分為公有同義詞和私有同義詞。
【創建公有synonym】
SQL>create public synonym emp for pb.employees@prod;
那么所有用戶只需輸入:
SQL>select * from emp;
私有同義詞是模式對象。他們要么必須在自己的模式中,要么必須用模式名限定。公有同義詞的存在于模式無關。
創建同義詞語法:
CREATE [PUBLIC] SYNONYM synonym for OBJECT;
刪除同義詞的語法:
DROP [PUBLIC] SYNONYM synonym ;
與視圖一樣,在下次訪問同義詞是自動重新編譯,也可以顯式地完成編譯:
ALTERSYNONYM synonym COMPILE;
【案例】
SQL>conn peenboo
SQL>createsynonym emp_s for emp_anon_v;
SQL>createsynonym dept_s for dept_anon_v;
SQL>createsynonym dsum_s for dep_sum_v;
SQL>describeemp_s
SQL>describeemp_anon_v;
SQL>select* from emp_s;
SQL>insertinto dept_s values(99,'TEMP_DEPT',1800);
SQL>insertinto emp_s values(sysdate,'AC_MGR',10000,0,99);
SQL>updateemp_s set salary =salary *1.1;
SQL>rollback;
SQL>selectmax(salaries /staff) from dsum_s;
SQL>dropview emp_anon_v;
SQL>dropview dept_anon_v;
SQL>select* from dep_sum_v; ---failed
SQL>alterview dept_sum_v compile; --failed
SQL>dropview dep_sum_v;
SQL>select* from dsum_s; --failed
SQL>alter synonym emp_s compile; --不會拋出錯誤,基于的視圖已刪除,同義詞也處于破壞狀態
SQL>dropsynonym emp_s;
SQL>dropsynonym dept_s;
SQL>dropsynonym dsum_s;
2、序列 (sequence)
Sequence 是生成唯一整數值得結構。是用來生成主鍵的寶貴工具。序列機制與表、行鎖機制及提交或回滾過程無關。
(1)創建序列語法:
CREATESEQUENCE [shema.]sequencename
[INCREMENTBY number]
[STARTWITH number]
[MAXVALUEnumber | NOMAXVALUE]
[MINVALUEnumber |NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHEnumber | NOCACHE]
[ORDER|NOORDER];
1、sequence_name:指定序列的名字
2、STARTWITH start_num:指定序列從哪個整數開始,該值默認是1
3、INCREMENTBY increment_num:指定該序列每次增加的增量,該值默認為1
4、MINVALUEminimum_num:指定該序列的最小整數,該值必須小于等于start_num,而且必須小于maxmum_num
5、NOMINVALUE:指定升序序列的最小值為1,降序序列的最小值為-10^26
NOMINVALUE為默認值
6、MAXVALUEmaximum_num:指定該序列的最大整數,這個值必須大于等于start_num,而且必須大于minimum_num
7、NOMAXVALUE指定升序序列的最大值為10^27,降序序列的最大值為-1
NOMAXVALUE為默認值
8、CYCLE:指定該序列即使已經達到最大值或最小值也繼續生成整數,當升序序列達到最大值時,下一個生成的值是最小值。當降序序列達到最小值時,下一個生成的值是最大值
9、NOCYCLE:指定該序列在達到最大值或最小值之后就不能再生成整數了,這個是默認值
10、CACHEcache_num:指定要保留在內存中整數的個數,默認要緩存的整數為20個,可以緩存的整數最少為2個,可以緩存的整數最多為
CELL(maximum_num-minimum_num)/ABS(increment_num)
11、NOCACHE指定不緩存任何整數
12、ORDER確保按照請求次序生成整數,在使用RAC時可以使用這個選項
13、NOORDERED不確保按照請求次序生成整數,這個是默認值
SQL>createsequence seq1;
(2)使用序列
偽列NEXTVAL 選擇下一個值,偽列CURRVAL選擇會話的上一個值(當前值)。
注:序列的CURRVAL是發送給當前會話的上一個值,不一定是發錯的上一個值。直到選擇了NEXTVAL后才能存在CURRVAL。
CREATESEQUENCE order_seq start with 10;
Createsequence line_seq start with 10;
Insertinto orders(order_id,order_date,customer_id)
Values(order_seq.nextval,sysdate,'1000');
Insertinto order_items(order_id,order_item_id,product_id)
Values(order_seq.currval,line_seq.nextval,'A1111');
Insertinto order_items(order_id,order_item_id,product_id)
Values(order_seq.currval,line_seq.nextval,'B111');
如果分析師指出序列不能有間隔,那么必須使用另一種生成唯一值的方式。
當前訂單可以存儲在該表中,并將它初始化為10:
Createtable current_on(order_number number);
Insertinto current_on values(10);
Commit;
然后創建訂單的代碼將變成:
Updatecurrent_on set order_number=order_number + 1;
Insertinto orders(order_number,order_date,customer_number)
Values((select order_number from current_on),sysdate,'1000');
Commit;
修改序列的語法如下:
ALTERSEQUENCE [shema.]sequencename
[INCREMENTBY number]
[STARTWITH number]
[MAXVALUEnumber | NOMAXVALUE]
[MINVALUEnumber |NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHEnumber | NOCACHE]
[ORDER|NOORDER];
Altersequence order_seq cache 1000;
如果希望將該序列重置為它的起始值,唯一的方法就是刪除重建。
Dropsequence order_seq;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。