主鍵表 - T表 '100W'數據同步到T1表(同步:TRUNCATE/DELETE或IMPDP...等方式[手動改數據])
成都創新互聯公司是一家專注于網站設計、網站建設與策劃設計,萊州網站建設哪家好?成都創新互聯公司做網站,專注于網站建設十載,網設計領域的專業建站公司;建站業務涵蓋:萊州等地區。萊州做網站價格咨詢:18980820575
例如: T表對應SEQ_T.NEXTVAL= 100W;
T1表對應SEQ_T.NEXTVAL= 10W;
TRUNCATE TABLE T1;
INSERT TABLE T1 SELECT * FROM T;
數據同步但T1表對應SEQ_T.NEXTVAL= 10W序列不變;
此時T1調用序列INSERT到T1表時就會報錯 ( ORA-00001 : 違反唯一約束條件 (LOTTERY.PK_T1))
(若批量同步很多表就可能會引起很多表序列需要更新成主鍵最大值+ 1才能保證不報錯
(可以用把源庫的SEQUENCE同步過來①或者如下存儲解決② ))
ORACLE中怎么設置SEQUENCE權限步驟如下:
1、Create Sequence
首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE權限。
創建語句如下:
CREATE?SEQUENCE seqTest
INCREMENT?BY?1?--?每次加幾個
START?WITH?1?--?從1開始計數
NOMAXvalue?--?不設置最大值
NOCYCLE?--?一直累加,不循環
CACHE?10;?--設置緩存cache個序列,如果系統down掉了或者其它情況將會導致序列不連續,也可以設置為---------NOCACHE
2、得到Sequence值?
定義好sequence后,你就可以用currVal,nextVal取得值。
CurrVal:返回 sequence的當前值
NextVal:增加sequence的值,然后返回 增加后sequence值
得到值語句如下:
SELECT?Sequence名稱.CurrVal?FROM?DUAL;?
如得到上邊創建Sequence值的語句為:
select?seqtest.currval?from?dual
在Sql語句中可以使用sequence的地方:
- 不包含子查詢、snapshot、VIEW的 SELECT 語句
- INSERT語句的子查詢中
- INSERT語句的values中
- UPDATE 的 SET中
如在插入語句中
insert?into?表名(id,name)values(seqtest.Nextval,'sequence?插入測試');
3、Alter Sequence?
擁有ALTER ANY SEQUENCE 權限才能改動sequence. 可以alter除start至以外的所有sequence參數.如果想要改變start值,必須 drop sequence 再 re-create。
4、Drop Sequence
DROP?SEQUENCE?seqTest;?
5、一個例子
create?or?replace?trigger?tri_test_id
before?insert?on?S_Depart???--S_Depart?是表名
for?each?row
declare
nextid?number;
begin
IF?:new.DepartId?IS?NULLor?:new.DepartId=0?THEN?--DepartId是列名
select?SEQ_ID.nextval?--SEQ_ID正是剛才創建的
into?nextid
from?sys.dual;
:new.DepartId:=nextid;
end?if;
end?tri_test_id;
如何使用Oracle序列:
Oracle序列(sequence)是一種數據庫項,能夠生成一個整數序列。通常用于填充數字類型的主鍵列。
1、創建序列:
CREATE SEQUENCE sequence_name
[START WITH start_num]
[INCREMENT BY increment_num]
[{MAXVALUE maximum_num|NOMAXVALUE}]
[{MINVALUE minimum_num|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE cache_num|NOCACHE}]
[{ORDER|NOORDER}]
其中:
start_num:序列開始整數
increment_num:每次增加的整數增量
maximum:序列最大整數
minimum:序列最小整數
CYCLE:循環生成
NOCYCLE:不循環生成,默認值
cache_num:保存在內存中的整數的個數
NOCACHE:不緩存任何整數
例如:
CREATE SEQUENCE seq_test;(默認值)
CREATE SEQUENCE seq_test START WITH 1 INCREMENT BY 2;
2、使用序列:
SELECT seq_test.nextval FROM dual;
insert into order_status2 (id) values (seq_test.nextval);
3、修改序列:
ALTER SEQUENCE語句來修改序列。可以修改的內容:
不能修改序列的初值
序列的最小值不能大于當前值
序列的最大值不能小于當前值
例如:ALTER SEQUENCE seq_test INCREMENT BY 3;
4、刪除序列:
DROP SEQUENCE seq_test;
) 建立序列命令
CREATE SEQUENCE [user ]sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];
INCREMENT BY 指定序列號之間的間隔 該值可為正的或負的整數 但不可為 序列為升序 忽略該子句時 缺省值為
START WITH 指定生成的第一個序列號 在升序時 序列可從比最小值大的值開始 缺省值為序列的最小值 對于降序 序列可由比最大值小的值開始 缺省值為序列的最大值
MAXVALUE 指定序列可生成的最大值
NOMAXVALUE 為升序指定最大值為 為降序指定最大值為
MINVALUE 指定序列的最小值
NOMINVALUE 為升序指定最小值為 為降序指定最小值為
) 更改序列命令
ALTERSEQUENCE [user ]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE]
修改序列可以
? 修改未來序列值的增量
? 設置或撤消最小值或最大值
? 改變緩沖序列的數目
? 指定序列號是否是有序
) 刪除序列命令
DROP SEQUENCE [user ]sequence_name
從數據庫中刪除一序列
創建一個序列號的語句
CREATE SEQUENCE EXAM_NO_SEQ
START WITH
MAXVALUE
MINVALUE
CYCLE
CACHE
NOORDER;
PB中取序列號的用法
string? v_exam_no
//獲取申請序號
SELECT exam_no_seq nextval INTO :v_exam_no FROM dual
using ghis_database;
if ghis_database SQLCODE then
messagebox( 取檢查序號出錯 )
return
end if
其他版本
oracle中沒有自增類型的字段的 所以通常情況下需要定義一個sequence來作為自動增長類型字段的數據
于是記錄了一些關于oracle sequence的資料 已備查用!
Oracle中的序列(sequence)
: 如何定義一個序列
僅向前的數字變量(和SQL中的自動編號有點像 identity( ) )
格式:
create sequence 序列名稱
start with 起始數
increment by 增長量
[maxvalue 值]
[minvalue 值]
[cycle 當到達最大值的時候 將繼續從頭開始]
[Nocycle 一直累加 不循環]
[Cache ]
注意
第一次NEXTVAL返回的是初始值;隨后的NEXTVAL會自動增加你定義的INCREMENT BY值 然后返回增加后的值 CURRVAL 總是返回當前SEQUENCE的值 但是在第一次NEXTVAL初始化之后才能使用CURRVAL 否則會出錯 一次NEXTVAL會增加一次SEQUENCE的值
如果指定CACHE值 ORACLE就可以預先在內存里面放置一些sequence 這樣存取的快些 cache里面的取完后 oracle自動再取一組到cache 使用cache或許會跳號 比如數據庫突然不正常down掉(shutdown abort) cache中的sequence就會丟失 所以可以在create sequence的時候用nocache防止這種情況
example:
create sequence mySeq
start with
increment by
maxvalue
minvalue
cycle
:怎么去取序列數據:
currval curenvalue
nextVal NextVlaue
example:
select mySeq nextVal from dual
注意一點:currval只有當nextVal執行一次以后才可以用
在創建表的時候 可以使用序列
具體例子:
create table 公司基本信息表
(
ComPID int
CompName varchar ( )
)
insert into 公司基本信息表 values(mySeq nextVal AA )
:如何修改序列
修改前提是sequence 的owner 或者有ALTER ANY SEQUENCE 權限才能改動sequence 可以alter除start至以外的所有sequence參數 如果想要改變start值 必須 drop sequence 再 re create
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY
MAXvalue
CYCLE 到 后從頭開始
NOCACHE
影響Sequence的初始化參數
SEQUENCE_CACHE_ENTRIES =設置能同時被cache的sequence數目
也可以這樣
alter sequence mySeq maxvalue
注意 不能改start with 其他隨便改(設置minvalue值的時候不能大于當前值)
:如何查看刪除某個表空間所有序列
查看
select * from user_sequences
如何刪除:
drop sequence 序列名稱
sequence屬于什么對象
sequence不屬于某個表 也不屬于某個字段 sequence僅僅屬于某個用戶
lishixinzhi/Article/program/Oracle/201311/17518
1、如果列名不適合,那么可以使用alter table語句的rename column子句改變列名。
2、用plsql developer工具修改方便。
Oracle數據庫一個最重要的部分就是數據字典,是只讀類型的表的集合,提供數據庫的信息。
一個數據字典包括: 數據庫對象所有的框架對象的定義〔表、視圖、索引、群集、同義詞、序列、過程、函數、包、觸發器等)。
數據字典的結構是表和視圖,就像其他數據庫數據一樣,一個給定數據庫的所有數據字典表的和視圖都存儲在數據庫的SYSTEM表空間中。數據字典不但是每個Oracle數據庫的重要組戍部分之一,同時對于所有的用戶,從應用設計人員到數據庫管理員,都是非常重要的工具。可以使用SQL語句訪問數據字典,由于數據字典是只讀的,所以只能使用SELECT語句訪問數據字典的表和視圖。
文章名稱:oracle序列怎么調整 oracle列順序調整
當前URL:http://vcdvsql.cn/article40/hpgoho.html
成都網站建設公司_創新互聯,為您提供品牌網站制作、小程序開發、定制網站、品牌網站設計、網站設計、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯