【问题标题】:Database script failing while executing in dbmaintain在 dbmaintain 中执行时数据库脚本失败
【发布时间】:2021-03-16 17:49:07
【问题描述】:

我试图在构建期间执行简单的ddl 文件。我们在项目中配置了dbmaintain,用于部署数据库相关的东西。但是,当在 sql developer 中执行时,来自 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;

有人可以指导我完成它吗?

【问题讨论】:

    标签: database deployment continuous-deployment


    【解决方案1】:

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

    PL/SQL 代码块必须始终以包含单个正斜杠的单独行结束。

    在你的情况下,它应该是这样的:

    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;
    /
    

    【讨论】:

    • 没错!这就是问题所在。谢谢
    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2011-06-28
    • 2021-05-18
    • 2021-09-19
    • 2020-11-24
    • 2020-08-19
    相关资源
    最近更新 更多