2010-06-01 6 views
8

In PostgreSQL kann man eine Sequenz definieren und als Primärschlüssel einer Tabelle verwenden. In HsqlDB kann immer noch eine Identitätsspalte mit automatischer Inkrementierung erstellt werden, die nicht mit einer benutzerdefinierten Sequenz verknüpft ist. Ist es möglich, eine benutzerdefinierte Sequenz als Generator einer Auto-Inkrement-Identitätsspalte in HsqlDB zu verwenden?Verknüpfen Sie eine Sequenz mit einer Identität in hsqldb

Beispiel SQL in 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 <> '') 
); 

Was ist das Äquivalent in HSQLDB?

Danke.

Antwort

13

In der Version 2.0 gibt es keine direkte Funktion dafür. Sie können einen BEFORE INSERT-Trigger auf der Tabelle definieren, dies zu tun:

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; 

und einfügen, ohne dass vlue für ID mit

INSERT INTO Unternehmenswerte null, 'test'

Update für HSQLDB 2.1 und höher: Eine Funktion wurde hinzugefügt, um dies zu unterstützen.

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

finden Sie im Handbuch unter TABLE http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_table_creation

Zusätzlich CREATE 2.1 und höher hat einen PostgreSQL-Kompatibilitätsmodus, in dem sie übernimmt die PostgreSQL CREATE TABLE-Anweisung, die die Reihenfolge in der DEFAULT-Klausel verweist und übersetzt sie in HSQLDB-Syntax.

Verwandte Themen