Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ant的同一个sql任务中,是否可以为不同的事务提供不同的事务行为?_Ant - Fatal编程技术网

在ant的同一个sql任务中,是否可以为不同的事务提供不同的事务行为?

在ant的同一个sql任务中,是否可以为不同的事务提供不同的事务行为?,ant,Ant,我在ant脚本中定义了上述目标,它首先删除表,然后创建它们。我希望ant在删除表时忽略错误(即onerror=“continue”),但在创建表期间发生错误时抛出异常(即onerror=“abort”)。但是它在“sql”标记中采用事务行为,因此它对于所有事务都是通用的 我不想创建单独的sql标记并重复DB细节。另外,我想通过文件执行sql。我怎样才能通过ant做到这一点?我只想这样做: <target name="create-db-tables" depends="initialize

我在ant脚本中定义了上述目标,它首先删除表,然后创建它们。我希望ant在删除表时忽略错误(即onerror=“continue”),但在创建表期间发生错误时抛出异常(即onerror=“abort”)。但是它在“sql”标记中采用事务行为,因此它对于所有事务都是通用的


我不想创建单独的sql标记并重复DB细节。另外,我想通过文件执行sql。我怎样才能通过ant做到这一点?

我只想这样做:

<target name="create-db-tables" depends="initialize">
        <fail message="Missing property [datasource.url]." unless="datasource.url" />
        <fail message="Missing property [db.user]." unless="db.user" />
        <fail message="Missing property [db.password]." unless="db.password" />
        <fail message="Missing property [db.sql.driver]." unless="db.sql.driver" />
        <sql driver="${db.sql.driver}" url="${datasource.url}" userid="${db.user}" password="${db.password}" output="${basedir}/createTable.log" onerror="continue">
<classpath>
    <pathelement location="${basedir}/../lib/ojdbc.jar"/>
</classpath>
            <transaction src="${basedir}/ddl/dropTables.sql" />
            <transaction src="${basedir}/ddl/createTables.sql" />
        </sql>
</target>
  • 为您需要的每个段创建一个sql标记,只需重新使用您提供的属性(这可能看起来很难看并且重复,但很有效)
  • 在sql标记之前定义类路径,并通过
    classpathref
  • 它可能是这样的:

    <target name="create-db-tables" depends="initialize">
            <fail message="Missing property [datasource.url]." unless="datasource.url" />
            <fail message="Missing property [db.user]." unless="db.user" />
            <fail message="Missing property [db.password]." unless="db.password" />
            <fail message="Missing property [db.sql.driver]." unless="db.sql.driver" />
            <sql driver="${db.sql.driver}" url="${datasource.url}" userid="${db.user}" password="${db.password}" output="${basedir}/createTable.log" onerror="continue">
    <classpath>
        <pathelement location="${basedir}/../lib/ojdbc.jar"/>
    </classpath>
                <transaction src="${basedir}/ddl/dropTables.sql" />
                <transaction src="${basedir}/ddl/createTables.sql" />
            </sql>
    </target>
    
    
    
    重复sql标记有什么不好?我不想给那些DB属性两次。有什么办法克服这个问题吗?我不介意使用sql标记两次。