更新时间:2023-03-17 GMT+08:00

序列

SEQUENCE是Oracle对象,用于创建数字序列号。该序列用于创建自动编号字段,可用作主键。

如果参数MigSupportSequence设为true(默认值),则在PUBLIC模式中创建序列。

  • CACHE和ORDER参数不支持迁移。
  • Oracle中,序列的MAXVALUE最大可设为999999999999999999999999999。GaussDB(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(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(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
;