序列
SEQUENCE是Oracle对象,用于创建数字序列号。该序列用于创建自动编号字段,可用作主键。
如果参数MigSupportSequence设为true(默认值),则在PUBLIC模式中创建序列。
- CACHE和ORDER参数不支持迁移。
- Oracle中,序列的MAXVALUE最大可设为999999999999999999999999999。GaussDB(DWS)中,MAXVALUE最大可设为9223372036854775807。
- 在迁移序列之前,请复制sequence_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生成下一个值。在DSC安装过程中,需在要执行迁移的所有数据库中创建该函数。
该函数支持DWS所有版本。
NEXTVAL是Oracle系统函数,GaussDB(DWS)不隐式支持该函数。为了支持该函数,DSC会在PUBLIC模式中创建一个NEXTVAL函数。迁移后的语句会使用该PUBLIC.NEXTVAL函数。
将参数MigSupportSequence设为true,可将NEXTVAL迁移为PUBLIC.NEXTVAL('[schema].sequence')。
将参数MigSupportSequence设为false,可将NEXTVAL迁移为NEXTVAL('[schema].sequence')。
在使用此函数之前,请复制sequence_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,用户可使用自定义函数,获取序列当前值。在DSC安装过程中,需在要执行迁移的所有数据库中创建该函数。
CURRVAL是Oracle系统函数,GaussDB(DWS)不隐式支持该函数。为了支持该函数,DSC会在PUBLIC模式中创建一个CURRVAL函数。迁移后的语句会使用该PUBLIC.CURRVAL函数。
将参数MigSupportSequence设为true,可将CURRVAL迁移为PUBLIC.CURRVAL('[schema].sequence')。
将参数MigSupportSequence设为false,可将CURRVAL迁移为CURRVAL('[schema].sequence')。
在使用此函数之前,请复制sequence_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 ; |