使用Apache ANT执行SQL的错误,但不是Oracle SQL Developer



以下是触发器:

CREATE OR REPLACE TRIGGER "CMDC"."USER_ROADS_UC"
BEFORE INSERT OR UPDATE OF
    ASSOCIATED_PARENT_ROAD
ON USER_ROADS
REFERENCES NEW AS NEW
FOR EACH ROW BEGIN
    :new.ASSOCIATED_PARENT_ROAD:=upper(:new.ASSOCIATED_PARENT_ROAD);
    EXCEPTION
    WHEN OTHERS THEN RETURN;
END;
/
ALTER TRIGGER "CMDC"."USER_ROADS_UC" ENABLE

上面在SQL开发人员中完美运行。但是,当我使用ANT运行以下错误时:

[sql] Failed to execute:  EXCEPTION WHEN OTHERS THEN RETURN
[sql] java.sql.SQLException: ORA-00900: invalid SQL statement
[sql] Failed to execute:  END
[sql] java.sql.SQLException: ORA-00900: invalid SQL statement
[sql] Failed to execute:  / ALTER TRIGGER "CMDC"."USER_ROADS_UC" ENABLE
[sql] java.sql.SQLException: ORA-00900: invalid SQL statement

我已经回顾了这个问题。但是,我仍然无法修改脚本以与Ant一起使用。

以下是蚂蚁目标

<target name="create-db-schema" >
        <echo message="############################################################"/>
        <echo message="#               Create Complete DB Schema                  #"/>
        <echo message="############################################################"/>
        <sql onerror="continue" classpathref="project.class.path" driver="${database.driverClassName}"
             url="${database.url}" userid="${database.username}" password="${database.password}">
            <path>
                <fileset dir="${test.dbscripts.dir}/schema/">
                    <include name="*.sql"/>
                </fileset>
            </path>
        </sql>
</target>

带有ant sql标签,即使我以多种方式尝试了同一脚本,我也无法同时运行SQL和PL/SQL。

但是使用外部库,我可以这样做。我已经使用了此库来完成该库添加到您的构建脚本。

<path id="dbmaintain-lib"><fileset dir="${dbmaintain.home}/lib"><include name="*.jar"/></fileset></path>
<taskdef resource="dbmaintain-anttasks.xml" classpathref="dbmaintain.lib"/>
    <target name="update-db">
    <updateDatabase scriptLocations="scripts" autoCreateDbMaintainScriptsTable="true">
        <database driverClassName="oracle.jdbc.driver.OracleDriver" userName="user" password="pass" url="jdbc:oracle:thin:@//localhost:1521/XE" schemaNames="SCHEMA"/>
    </updateDatabase>
</target>

现在,Everthing现在可以完美地工作,而无需更改SQL脚本文件以替换';'。希望这对有需要的人有帮助。

我没有测试该解决方案的环境。但是为了测试目的,您可以尝试这样的事情。

<sql
    driver="xxx"
    url="xxx"
    userid="xxx"
    password="xxx"
    delimiter="/"
    delimitertype="row"
    ><![CDATA[
CREATE OR REPLACE TRIGGER "CMDC"."USER_ROADS_UC"
BEFORE INSERT OR UPDATE OF
    ASSOCIATED_PARENT_ROAD
ON USER_ROADS
REFERENCES NEW AS NEW
FOR EACH ROW BEGIN
    :new.ASSOCIATED_PARENT_ROAD:=upper(:new.ASSOCIATED_PARENT_ROAD);
    EXCEPTION
    WHEN OTHERS THEN RETURN;
END;
/
ALTER TRIGGER "CMDC"."USER_ROADS_UC" ENABLE
/
]]></sql>
  • 很重要!现在,您的定界符是"/"在新线路中,没有任何周围的空间。

相关内容

  • 没有找到相关文章

最新更新