在 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;
/
我试图在构建过程中执行简单的 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;
/