2010-06-01 2 views
8

Dans PostgreSQL, on peut définir une séquence et l'utiliser comme clé primaire d'une table. Dans HsqlDB, il est toujours possible de créer une colonne d'identité à incrémentation automatique qui ne soit liée à aucune séquence définie par l'utilisateur. Est-il possible d'utiliser une séquence définie par l'utilisateur en tant que générateur d'une colonne d'identité à incrémentation automatique dans HsqlDB?Lier une séquence à une identité dans hsqldb

sql Sample dans PostgreSql:

CREATE SEQUENCE seq_company_id START WITH 1; 

CREATE TABLE company (
    id bigint PRIMARY KEY DEFAULT nextval('seq_company_id'), 
    name varchar(128) NOT NULL CHECK (name <> '') 
); 

Quel est l'équivalent en hsqldb?

Merci.

Répondre

13

Dans la version 2.0, il n'y a pas de fonctionnalité directe pour cela. Vous pouvez définir un déclencheur BEFORE INSERT sur la table pour le faire:

CREATE TABLE company (id bigint PRIMARY KEY, name varchar(128) NOT NULL CHECK (name <> '')); 

CREATE TRIGGER trigg BEFORE INSERT 
ON company REFERENCING NEW ROW AS newrow 
FOR EACH ROW 
SET newrow.id = NEXT VALUE FOR seq_company_id; 

et insérer sans utiliser vlue id

INSERT INTO société des valeurs NULL, 'test'

Mise à jour pour HSQLDB 2.1 et plus tard: Une fonctionnalité a été ajoutée pour supporter ceci.

CREATE SEQUENCE SEQU 
CREATE TABLE company (id bigint GENERATED BY DEFAULT AS SEQUENCE SEQU PRIMARY KEY, name varchar(128) NOT NULL CHECK (name <> '')); 

Voir le Guide sous CREATE TABLE http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_table_creation

De plus, 2.1 et a plus tard un mode de compatibilité PostgreSQL dans laquelle elle accepte la déclaration PostgreSQL CREATE TABLE qui fait référence à la séquence dans la clause DEFAULT et traduit à Syntaxe HSQLDB

Questions connexes