创建具有特定START WITH值的DB2序列

时间:2010-09-01 16:20:11

标签: db2 sequence

在Oracle中,我们可以这样做:

declare current_max_value NUMBER;
begin select last_number+1 into current_max_value from USER_SEQUENCES where sequence_name = 'HIBERNATE_SEQUENCE';
execute immediate 'CREATE SEQUENCE SEQ__NEW_SEQUENCE MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH '||current_max_value|| ' CACHE 20 NOORDER NOCYCLE';

是否有DB2等价物?

2 个答案:

答案 0 :(得分:4)

DB2具有相当的功能。

如果你只需要生成uninque键,那么: -

CREATE TABLE MYTABLE (
     GENERATED_KEY                    BIGINT
        GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 100),
     MY_DATA                          VARCHAR(1000) ........... 

在create table语句中将完成此操作而不会有太多的麻烦。只要在插入上遇到空值,就会生成一个新数字。

如果您需要在几个表上使用实际序列号,那么:

CREATE SEQUENCE ORG_SEQ
 START WITH 1
 INCREMENT BY 1
 NO MAXVALUE
 NO CYCLE
 CACHE 24

将定义一个序列,然后在你希望sql中的下一个数字的任何地方使用“NEXTVAL”关键字:

NEXTVAL FOR ORG_SEQ

答案 1 :(得分:0)

经过一段很大的困难后,我能够用DB2语法解决这个问题,在这里我们去了

CREATE PROCEDURE SEQ_NAME
LANGUAGE SQL
DYNAMIC RESULT SETS 1
BEGIN ATOMIC
DECLARE MAX_VAL_NO INTEGER;
SELECT MAX(COL_NAME)+1 INTO MAX_VAL_NO FROM TABLE_NAME;
execute immediate 'CREATE SEQUENCE SEQ_NAME NO MAXVALUE NO CYCLE START WITH '|| MAX_VAL_NO;
END
GO

任何人都可以告诉我为什么要使用LANGUAGE SQLDYNAMIC RESULT SETS 1

这里使用的语法是什么,坦率地说我真的没有想法,但我通过反复试验方法来实现它。急切地等待知道语法是ANSI C还是其他一些。

感谢你能否回答这个问题。还提供一些好的学习链接。(非常规的IBM链接