H2 Db, ID NextVal - PullRequest
       18

H2 Db, ID NextVal

0 голосов
/ 20 апреля 2020

У меня есть последовательность:

CREATE SEQUENCE OWNER_SEQ START WITH 1;

Мне нужно вызвать эту последовательность для столбца идентификатора таблицы OWNER

CREATE TABLE METADATA.OWNER
(
    OWNER_ID           NUMBER  NEXTVAL(METADATA.OWNER_SEQ),
    OWNER_FIRSTNAME    VARCHAR2(100),
    OWNER_LASTNAME     VARCHAR2(100),
    CONSTRAINT OWNER_PK PRIMARY KEY (OWNER_ID)
);

Я пробовал несколько версий NEXTVAL, но все выдает ошибку

1 Ответ

0 голосов
/ 20 апреля 2020

NUMBER тип данных совместим с Oracle, его вообще не следует использовать в H2, особенно для первичных ключей, этот тип данных медленный. Гораздо лучше использовать BIGINT или INTEGER.


Обычно вам не следует также использовать последовательности, если вам не нужно делить последовательность между несколькими таблицами. Вы можете использовать столбец идентификаторов:

OWNER_ID BIGINT GENERATED BY DEFAULT AS IDENTITY,

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

OWNER_ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1),

START WITH 1, однако, не очень полезно, поскольку это начальное значение будет используется по умолчанию.


Но если у вас есть реальная причина использовать последовательность, вам нужно указать ее как DEFAULT значение:

OWNER_ID BIGINT DEFAULT NEXT VALUE FOR METADATA.OWNER_SEQ,
...