在 dbmaintain 中执行时数据库脚本失败

Database script failing while executing in dbmaintain

我试图在构建过程中执行简单的 ddl 文件。我们在我们的项目中配置了 dbmaintain 来部署数据库相关的东西。然而,当在 sql 开发人员中执行时,来自 ddl 文件的查询正在成功执行。但在构建中由于以下错误而失败。

Error Message
Last statement in script was not ended correctly. Each statement should end with one of [;, /]
Stacktrace
org.unitils.core.UnitilsException: Last statement in script was not ended correctly. Each statement should end with one of [;, /]
    at org.unitils.dbmaintainer.script.impl.DefaultScriptParser.getNextStatementImpl(DefaultScriptParser.java:160)
    at org.unitils.dbmaintainer.script.impl.DefaultScriptParser.getNextStatement(DefaultScriptParser.java:93)
    at org.unitils.dbmaintainer.script.impl.DefaultScriptRunner.execute(DefaultScriptRunner.java:59)
    at org.unitils.dbmaintainer.DBMaintainer.executeScripts(DBMaintainer.java:342)
    at org.unitils.dbmaintainer.DBMaintainer.updateDatabase(DBMaintainer.java:303)
    at org.unitils.dbmaintainer.DBMaintainer.updateDatabase(DBMaintainer.java:250)
    at org.unitils.database.DatabaseModule.updateDatabase(DatabaseModule.java:294)
    at org.unitils.database.DatabaseModule.createDataSource(DatabaseModule.java:353)
    at org.unitils.database.DatabaseModule.getDataSource(DatabaseModule.java:226)
    at org.unitils.orm.jpa.util.JpaEntityManagerFactoryLoader.getDataSource(JpaEntityManagerFactoryLoader.java:83)
    at

我尝试在每个语句的末尾输入分号,但问题仍然存在。 下面是我的 ddl 文件 001_create_req_tables.ddl

CREATE SEQUENCE ref_id_seq_ls;

CREATE TABLE LABEL_SOURCE_PRODUCTS(
REF_ID                      NUMBER(20)      NOT NULL, 
EAN_CODE                    VARCHAR2(255)   NOT NULL, 
CRY_ID                      VARCHAR2(10)    NOT NULL, 
IS_LABEL_SOURCE             VARCHAR2(1)     NOT NULL,
ACCOUNT_IDENTIFIER          VARCHAR2(4000),
CREATED_BY                  VARCHAR2(20), 
LAST_UPDATED_BY             VARCHAR2(20),
CREATED_ON                  DATE,
LAST_UPDATED_ON             DATE
);

CREATE TABLE ACTIVATE_FEATURE(
REF_ID                      NUMBER(20)      NOT NULL,
FEATURE_NAME                VARCHAR2(20)    NOT NULL,
IS_ACTIVE_FEATURE           VARCHAR2(1)     NOT NULL,
CREATED_BY                  VARCHAR2(20), 
LAST_UPDATED_BY             VARCHAR2(20),
CREATED_ON                  DATE,
LAST_UPDATED_ON             DATE
);

CREATE TRIGGER LS_LABEL_SOURCE_PRODUCTS
BEFORE INSERT ON LABEL_SOURCE_PRODUCTS
FOR EACH ROW
BEGIN
  SELECT ref_id_seq_ls.nextval
  INTO :new.REF_ID
  FROM dual;
END;

谁能指导我完成它。

那是因为 dbmaintain 无法正确分隔 001_create_req_tables.ddl 中的命令。根据 documentation:

Blocks of PL/SQL code must always end with a separate line containing a single forward slash.

在您的情况下,它应该如下所示:

CREATE TRIGGER LS_LABEL_SOURCE_PRODUCTS
BEFORE INSERT ON LABEL_SOURCE_PRODUCTS
FOR EACH ROW
BEGIN
  SELECT ref_id_seq_ls.nextval
  INTO :new.REF_ID
  FROM dual;
END;
/