Создание последовательности DB2 с определенным значением START WITH - PullRequest
1 голос
/ 01 сентября 2010

В 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 ]

4 голосов
/ 02 сентября 2010

DB2 обладает практически эквивалентной функциональностью.

Если вам просто нужно сгенерировать неинклюзивные ключи, то: -

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

В операторе создания таблицы это будет выполнено без особых хлопот.Каждый раз, когда на вставке встречается нулевое значение, генерируется новый номер.

Если вам нужно использовать фактический порядковый номер для нескольких таблиц, то:

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

определит последовательностьЗатем вы используете ключевое слово «NEXTVAL» везде, где хотите следующий номер в sql:

NEXTVAL FOR ORG_SEQ
0 голосов
/ 23 октября 2012

После огромных трудностей мне удалось выяснить это с помощью синтаксиса DB2, и здесь мы идем

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

Может ли кто-нибудь сказать мне, почему мы должны использовать LANGUAGE SQL и DYNAMIC RESULT SETS 1

И какой синтаксис здесь используется, честно говоря, у меня действительно нет идеи, но я реализовал ее методом проб и ошибок. С нетерпением жду, чтобы узнать, каков синтаксис: ANSI C или какой-то другой.

Ценю, если бы вы могли ответить на этот вопрос. Также предоставьте некоторые ссылки для хорошего изучения. ( Не обычные ссылки IBM )

...