在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等价物?
答案 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 SQL
和DYNAMIC RESULT SETS 1
这里使用的语法是什么,坦率地说我真的没有想法,但我通过反复试验方法来实现它。急切地等待知道语法是ANSI C还是其他一些。
感谢你能否回答这个问题。还提供一些好的学习链接。(非常规的IBM链接)