2017-04-18 9 views
0

私はテストコンテキストでHSQLDB 2.4.0でpostgresql dialectを使用しています。私もtrigger procedureHSQLDB 2.4.0でトリガプロシージャがサポートされています

を使用してい 私はHSQLDBに私の最初のSQLスクリプトをロードする場合:

SET DATABASE SQL SYNTAX PGS TRUE; 

CREATE FUNCTION trigg_proc() RETURNS trigger 
LANGUAGE plpgsql 
AS $$ 
BEGIN 
    INSERT INTO test(desc) 
    VALUES('hello world'); 
    RETURN NEW; 
END; 
$$; 

CREATE TABLE test(
desc CHARACTER VARYING(60) NOT NULL 
); 

私は

... 
Caused by: java.sql.SQLSyntaxErrorException: unexpected token: TRIGGER 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) 
    at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) 
    at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:473) 
    ... 58 more 
Caused by: org.hsqldb.HsqlException: unexpected token: TRIGGER 
    at org.hsqldb.error.Error.parseError(Unknown Source) 
    at org.hsqldb.ParserBase.unexpectedToken(Unknown Source) 
    at org.hsqldb.ParserBase.checkIsNonCoreReservedIdentifier(Unknown Source) 
    at org.hsqldb.ParserDQL.checkIsSchemaObjectName(Unknown Source) 
    at org.hsqldb.ParserDQL.readTypeDefinition(Unknown Source) 
    at org.hsqldb.ParserRoutine.readProcedureOrFunctionDeclaration(Unknown Source) 
    at org.hsqldb.ParserRoutine.readCreateProcedureOrFunction(Unknown Source) 
    at org.hsqldb.ParserRoutine.compileCreateProcedureOrFunction(Unknown Source) 
    at org.hsqldb.ParserDDL.compileCreate(Unknown Source) 
    at org.hsqldb.ParserCommand.compilePart(Unknown Source) 
    at org.hsqldb.ParserCommand.compileStatements(Unknown Source) 
    at org.hsqldb.Session.executeDirectStatement(Unknown Source) 
    at org.hsqldb.Session.execute(Unknown Source) 
    ... 61 more 

HSQLDB

からこのエラーを取得し、私は私が「かどうかを知りたいです構成に関する何かが見つからないか、HSQLDBがトリガプロシージャをサポートしていない場合です。

+0

トリガーは、HSQLDBではまったく異なる構文を持っています(そして** PL/pgSQLをサポートしていません**)。詳細については、マニュアルを参照してください:http://hsqldb.org/doc/2.0/guide/triggers-chapt.html 'SYNTAX PGS'は、いくつかのシンタックス要素の非常に"非常に "薄い互換性のレイヤーです。 HSQLDBがPostgreのように魔法のように動作することはありません –

答えて

0

postgresとHSQLDBのトリガの構文は互換性がありません。あなたはHSQLDBにトリガを作成する必要がある場合は

たとえば、Oracleのトリガーの構文と非常によく似て

CREATE TRIGGER my_table_trigger 
    BEFORE INSERT ON my_table REFERENCING NEW ROW AS NEW 
    FOR EACH ROW 
    BEGIN ATOMIC 
     BEGIN ATOMIC 
    IF NEW.id IS NULL THEN 
     SELECT my_table_seq.NEXTVAL INTO NEW.id FROM DUAL; 
    END IF; 
    END; 
END 

以下のようなものとして、それを書き込みます。

データベースの方言は、通常、DB間PL/SQL操作を実行するのに役立ちませんでした。

あなたはこの点を念頭に置いてください。

データベース固有の機能を実行する必要がある場合は、データベースの方言には依存せず、代わりにネイティブクエリを使用してください。

また、アプリケーションで使用するデータベースごとに異なるネイティブクエリーを維持します。

関連する問題