【发布时间】:2017-04-18 09:51:26
【问题描述】:
我在测试上下文中使用带有 HSQLDB 2.4.0 的 postgresql 方言。 我也在使用trigger procedure
当我将我的第一个 SQL 脚本加载到 HSQLDB 中时:
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
);
我从 HSQLDB 收到此错误
...
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 中有完全不同的语法(而且它不支持 PL/pgSQL)。有关详细信息,请参阅手册:hsqldb.org/doc/2.0/guide/triggers-chapt.html
SYNTAX PGS只是一些语法元素的非常非常“薄”的兼容层。它不会让 HSQLDB 像 Postgre 那样神奇地工作
标签: hsqldb