для выполнения .sql файла сценария от МУРАВЬЯ, это хорошо работает с помощью следующей задачи:
<sql
classpath="${oracle.jar}" driver="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@@@{db.hostname}:@{db.port}:@{db.sid}"
userid="@{db.user}"
password="@{db.password}"
src="@{db.sql.script}" />
Но если .sql файл не только будет содержать чистый SQL, но также и МН / SQL, то задача перестанет работать. Это могло быть решено при помощи следующего отрывка:
<sql
classpath="${oracle.jar}" driver="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@@@{db.hostname}:@{db.port}:@{db.sid}"
userid="@{db.user}"
password="@{db.password}"
delimiter="/"
delimitertype="row"
src="@{db.sql.script}" />
Но если мой сценарий будет содержать и SQL и МН / SQL затем, то никакая задача Ant не будет работать. Другое решение состояло бы в том, чтобы использовать "исполнительную" задачу с "sqlplus":
<exec executable="sqlplus" failonerror="true" errorproperty="exit.status">
<arg value="${db.user}/${db.password}@${db.hostname}:${db.port}/${db.sid}"/>
<arg value="@${db.sql.script}"/>
</exec>
Но к сожалению эта задача никогда не перестанет работать, следовательно сборка всегда возвращается с "УСПЕШНЫМ" даже при том, что sql выполнение сценария перестало работать. Ошибочное свойство, которое я пытался установить, не возвратит кода ошибки.
Какие-либо идеи/предложения, как решить эту проблему?
Спасибо,
Peter
Peter,
Добавьте в начало скриптов
WHENEVER SQLERROR EXIT SQL.CODE;
Тогда sqlplus выйдет с кодом выхода != 0.