日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle生成字母序号6,创建以字母数字开头的Oracle序列

發布時間:2024/9/27 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle生成字母序号6,创建以字母数字开头的Oracle序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

只能創建整數值序列.

所以聲明必須是:

CREATE SEQUENCE invoice_nun

START WITH 1

INCREMENT BY 1;

您可以將獲取的值轉換為字符串并添加適當的前綴.

select 'INV'||to_char(invoice_nun.nextval,'FM09999999')

from dual;

您可以創建一個函數來模擬返回適當字符串值的序列

create or replace function next_invoice_nun return varchar2

as

begin

return('INV'||to_char(invoice_nun.nextval,'FM09999999') );

end;

/

你現在可以做

select next_invoice_nun

from dual;

CREATE SEQUENCE invoice_nun

CACHE 20

NOORDER

START WITH 1

INCREMENT BY 1;

您應該了解以下內容:

1)如果事務獲取序列值并回滾,則序列值將丟失.因此,如果您執行以下操作:

-- fetch invoice_id INV00000001

insert into invoices(invoice_id,...) values (next_invoice_nun,...);

commit;

-- fetch invoice_id INV00000002

insert into invoices(invoice_id,...) values (next_invoice_nun,...);

rollback;

-- fetch invoice_id INV00000003

insert into invoices(invoice_id,...) values (next_invoice_nun,...);

commit;

發票idsINV00000001和INV00000003已插入theinvoicestable,但發票idINV00000002`丟失,因為提取它的語句已回滾

2)如果實例崩潰,則實例緩存中的所有序列都將丟失.在您的示例中,使用緩存的默認值為20.因此,如果實例最多崩潰,則可能會丟失20個序列值. alter native是使用關鍵字NOCYCLE如果您創建序列,但這會帶來性能損失.

3)如果您在RAC系統上,序列號不代表獲取語句的順序.因此,如果第二個語句在與第一個語句不同的實例上執行,則第一個語句可能獲取id INV00000021,第二個語句獲取id INV00000001.這是因為實例在其高速緩存中獲取了前20個序列號,而另一個實例在其高速緩存中獲取了第二個20個序列號.第一個語句在獲取第二個20個序列號的實例上執行.您可以使用ORDER關鍵字來避免這種情況,但這會再次帶來性能損失

所以人們可以避免2)和3)的性能懲罰的價格,但沒有辦法避免2).

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的oracle生成字母序号6,创建以字母数字开头的Oracle序列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。