序列
SEQUENCE是Oracle对象,用于创建数字序列号。该序列用于创建自动编号字段,可用作主键。
如果参数MigSupportSequence设为true(默认值),则在PUBLIC模式中创建序列。

- CACHE和ORDER参数不支持迁移。
- Oracle中,序列的MAXVALUE最大可设为999999999999999999999999999。DWS中,MAXVALUE最大可设为9223372036854775807。
- 在迁移序列之前,请复制custom_scripts.SQL文件的内容,并在所有目标数据库中执行此脚本。详情请参见迁移流程。
序列
输入:CREATE SEQUENCE
1 2 3 4 5 6 7 | CREATE SEQUENCE GROUP_DEF_SEQUENCE
minvalue 1
maxvalue 100000000000000000000
start with 1152
increment by 1
cache 50
order;
|
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | INSERT
INTO
PUBLIC.MIG_SEQ_TABLE (
SCHEMA_NAME
,SEQUENCE_NAME
,START_WITH
,INCREMENT_BY
,MIN_VALUE
,MAX_VALUE
,CYCLE_I
,CACHE
,ORDER_I
)
VALUES (
UPPER( current_schema ( ) )
,UPPER( 'GROUP_DEF_SEQUENCE' )
,1152
,1
,1
,9223372036854775807
,FALSE
,20
,FALSE
)
;
|
SEQUENCE和NOCACHE
输入:CREATE SEQUENCE,使用NOCACHE
1 2 3 4 5 | CREATE SEQUENCE customers_seq
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;
|
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | INSERT
INTO
PUBLIC.MIG_SEQ_TABLE (
SCHEMA_NAME
,SEQUENCE_NAME
,START_WITH
,INCREMENT_BY
,MIN_VALUE
,MAX_VALUE
,CYCLE_I
,CACHE
,ORDER_I
)
VALUES (
UPPER( current_schema ( ) )
,UPPER( 'customers_seq' )
,1000
,1
,1
,999999999999999999999999999
,FALSE
,20
,FALSE
)
;
|
CREATE SEQUENCE和模式名
输入:CREATE SEQUENCE,使用模式名
1 2 3 4 | CREATE SEQUENCE scott.seq_customers
START WITH 1000 INCREMENT BY 1
MINVALUE 1000 MAXVALUE 999999999999999
CACHE 20 CYCLE ORDER;
|
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | INSERT
INTO
PUBLIC.MIG_SEQ_TABLE (
SCHEMA_NAME
,SEQUENCE_NAME
,START_WITH
,INCREMENT_BY
,MIN_VALUE
,MAX_VALUE
,CYCLE_I
,CACHE
,ORDER_I
)
VALUES (
UPPER( 'scott' )
,UPPER( 'seq_customers' )
,1000
,1
,1000
,999999999999999
,TRUE
,20
,FALSE
)
;
|
CREATE SEQUENCE和默认值
输入:SEQUENCE,使用默认值
1 | CREATE SEQUENCE seq_orders;
|
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | INSERT
INTO
PUBLIC.MIG_SEQ_TABLE (
SCHEMA_NAME
,SEQUENCE_NAME
,START_WITH
,INCREMENT_BY
,MIN_VALUE
,MAX_VALUE
,CYCLE_I
,CACHE
,ORDER_I
)
VALUES (
UPPER( current_schema ( ) )
,UPPER( 'seq_orders' )
,1
,1
,1
,999999999999999999999999999
,FALSE
,20
,FALSE
)
;
|
NEXTVAL
要迁移NEXTVAL,用户可使用自定义函数,根据increment_by、max_value、min_value和cycle生成下一个值。在MT安装过程中,需在要执行迁移的所有数据库中创建该函数。
该函数支持DWS所有版本。
NEXTVAL是Oracle系统函数,GaussDB T、DWS不隐式支持该函数。为了支持该函数,DSC会在PUBLIC模式中创建一个NEXTVAL函数。迁移后的语句会使用该PUBLIC.NEXTVAL函数。

将参数MigSupportSequence设为true,可将NEXTVAL迁移为PUBLIC.NEXTVAL('[schema].sequence')。
将参数MigSupportSequence设为false,可将NEXTVAL迁移为NEXTVAL('[schema].sequence')。
在使用此函数之前,请复制custom_scripts.SQL文件的内容,并在所有目标数据库中执行此脚本。详情请参见迁移流程。
输入:NEXTVAL
1 | [schema.]sequence.NEXTVAL
|
输出
1 | PUBLIC.nextval('[schema.]sequence')
|
输入:NEXTVAL
1 2 3 4 5 6 | SELECT
EMP_ID_SEQ.NEXTVAL INTO
SEQ_NUM
FROM
dual
;
|
输出
1 2 3 4 5 6 | SELECT
PUBLIC.NEXTVAL ('EMP_ID_SEQ') INTO
SEQ_NUM
FROM
dual
;
|
CURRVAL
要迁移CURRVAL,用户可使用自定义函数,获取序列当前值。在MT安装过程中,需在要执行迁移的所有数据库中创建该函数。
CURRVAL是Oracle系统函数,GaussDB T、DWS不隐式支持该函数。为了支持该函数,DSC会在PUBLIC模式中创建一个CURRVAL函数。迁移后的语句会使用该PUBLIC.CURRVAL函数。

将参数MigSupportSequence设为true,可将CURRVAL迁移为PUBLIC.CURRVAL('[schema].sequence')。
将参数MigSupportSequence设为false,可将CURRVAL迁移为CURRVAL('[schema].sequence')。
在使用此函数之前,请复制custom_scripts.SQL文件的内容,并在所有目标数据库中执行此脚本。详情请参见迁移流程。
输入:CURRVAL
1 | [schema.]sequence.CURRVAL
|
输出
1 | currval('[schema.]sequence')
|
输入:CURRVAL
1 2 3 4 5 6 7 8 9 10 11 12 13 | INSERT
INTO
Line_items_tab (
Orderno
,Partno
,Quantity
)
VALUES (
Order_seq.CURRVAL
,20321
,3
)
;
|
输出
1 2 3 4 5 6 7 8 9 10 11 | INSERT
INTO
Line_items_tab (
Orderno
,Partno
,Quantity
) SELECT
PUBLIC.CURRVAL ('Order_seq')
,20321
,3
;
|
