2010-06-01 19 views
8

En PostgreSql, se puede definir una secuencia y usarla como la clave principal de una tabla. En HsqlDB, aún se puede lograr la creación de una columna de identidad de autoincremento que no se vincule con ninguna secuencia definida por el usuario. ¿Es posible usar una secuencia definida por el usuario como el generador de una columna de identidad de incremento automático en HsqlDB?Enlazar una secuencia con una identidad en hsqldb

SQL Muestra en 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 <> '') 
); 

¿Cuál es el equivalente en hsqldb?

Gracias.

Respuesta

13

En la versión 2.0, no hay una función directa para esto. Puede definir un disparador Insertar antes en la mesa para hacer esto:

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; 

e insertar sin utilizar ningún vlue de Identificación del

INSERT INTO compañía de valores nulos, 'prueba'

Actualización para HSQLDB 2.1 y posterior: Se ha agregado una función para admitir esto.

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

Consulte la guía bajo CREATE TABLE http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_table_creation

Además, 2.1 y más tarde tiene un modo de compatibilidad PostgreSQL en la que se acepta la PostgreSQL CREATE TABLE que hace referencia a la secuencia en la cláusula DEFAULT y lo traduce a Sintaxis HSQLDB

Cuestiones relacionadas