Sql

説明

JDBC を介してデータベースに対して一連の SQL 文を実行します。文は、src 属性を使用してテキストファイルから読み込むか、囲んでいる SQL タグの間から読み込むことができます。

複数の文をセミコロン(または定義された delimiter)で区切って指定できます。文内の個々の行は、行の先頭に --//、または REM を使用してコメントアウトできます。

autocommit 属性は、文の実行中に自動コミットをオンにするかオフにするかを指定します。自動コミットが on の場合、各文は実行およびコミットされます。 off の場合、文はすべて 1 つのトランザクションとして実行されます。

onerror 属性は、文のいずれかの実行中にエラーが発生した場合の処理方法を指定します。可能な値は、continue 実行を継続し、エラーのみを表示します。 stop 実行を停止し、エラーをログに記録しますが、タスクは失敗しません。 abort 実行とトランザクションを中止し、タスクを失敗させます。

プロキシ。一部の JDBC ドライバー(Oracle Thin ドライバーを含む)は、JVM のプロキシ設定を使用して JDBC 操作をデータベースにルーティングします。 Apache Ant 1.7 以降、Java 5 以降で実行されている Ant は、オペレーティングシステムのプロキシ設定を使用する ようにデフォルト設定されています。したがって、OS のプロキシ設定が有効であるか、-noproxy オプションを使用して Ant のプロキシサポートを無効にする必要があります。

パラメータ

属性 説明 必須
driver jdbc ドライバーのクラス名 はい
url データベース接続 URL はい
userid データベースユーザー名 はい
password データベースパスワード はい
src SQL 文を含むファイル タグ内に文が囲まれていない場合は必須
encoding SQL 文を含むファイルのエンコーディング いいえ; デフォルトは JVM のデフォルト文字エンコーディング
outputencoding 結果を保持するファイルのエンコーディング。 Ant 1.9.4 以降 いいえ; デフォルトは JVM のデフォルト文字エンコーディング
delimiter SQL 文を区切る文字列 いいえ; デフォルトは ;;
autocommit データベース接続の自動コミットフラグ いいえ; デフォルトは false
print 文の結果セットを出力する いいえ; デフォルトは false
showheaders 文の結果セットのヘッダーを出力する いいえ; デフォルトは true
showtrailers 影響を受けた行数のトレーラーを出力する いいえ; デフォルトは true
output 結果セットの出力ファイル。 Ant 1.8 以降、出力をサポートする任意のリソースを指定できます(注記 を参照)。 いいえ; デフォルトでは System.out に出力
append 出力を既存のファイルに追加するか、上書きするか。 いいえ; デフォルトは falseoutput がファイルシステムの宛先を指定していない場合は無視されます
classpath ドライバーのロードに使用されるクラスパス いいえ; デフォルトはシステムクラスパス
classpathref 使用するクラスパス。他の場所で定義されたパスへの 参照 として指定されます。 いいえ; デフォルトはシステムクラスパス
onerror 文が失敗したときに実行するアクション: continuestopabort いいえ; デフォルトは abort
rdbms この RDBMS の場合にのみタスクを実行する いいえ; デフォルトでは無制限
version RDBMS のバージョンが一致する場合にのみタスクを実行する いいえ; デフォルトでは無制限
caching タスクはローダーとドライバーをキャッシュする必要がありますか? いいえ; デフォルトは true
delimitertype 区切り文字が単独の行でのみ認識されるかどうかを制御します。
normal - 行のどこでも、または row - 単独の行にある必要があることを意味します
いいえ; デフォルトは normal
keepformat SQL の形式を保持するかどうかを制御します。
パッケージとプロシージャをロードする場合に便利です。
いいえ; デフォルトは false
escapeprocessing Java ステートメントオブジェクトがエスケープ置換を実行するかどうかを制御します。
詳細については、Statement の API ドキュメント を参照してください。 Ant 1.6 以降
いいえ; デフォルトは true
expandproperties ネストされた SQL、タスク内のインライン、またはネストされたトランザクションでプロパティ展開を有効にするには、true に設定します。 Ant 1.7 以降いいえ; デフォルトは true
rawblobs true の場合、BLOB の結果を出力する際に、16 進エンコードではなく生のストリームを書き込みます。 Ant 1.7.1 以降 いいえ; デフォルトは false
failOnConnectionError false の場合、タスクがデータベースへの接続に失敗した場合、警告メッセージのみを出力し、ステートメントを実行しません。 Ant 1.8.0 以降 いいえ; デフォルトは true
strictDelimiterMatching false の場合、区切り文字は大文字と小文字を区別せずに検索され(つまり、delimiter=goGO に一致します)、周囲の空白は無視されます(delimiter=goGO に一致します)。 Ant 1.8.0 以降 いいえ; デフォルトは true
showWarnings true の場合、SQLWarnings は warning レベルでログに記録されます。 Ant 1.8.0 以降
注記: 属性が false に設定されている場合でも、接続に適用される警告は verbose レベルでログに記録されます。
いいえ; デフォルトは false
treatWarningsAsErrors true の場合、SQLWarnings はエラーとして扱われ、onError 属性で選択されたロジックが適用されます。 Ant 1.8.0 以降 いいえ; デフォルトは false
csvColumnSeparator 結果を出力するときに使用される列区切り文字。 Ant 1.8.0 以降 いいえ; デフォルトは ,
csvQuoteCharacter 列の値を引用符で囲むために使用される文字。
設定されている場合、列区切り文字または引用符自体を含む列は、引用符で囲まれます。引用符自体が列の値の中に現れる場合は、二重になります。
注記: BLOB 値は引用符で囲まれません。 Ant 1.8.0 以降
いいえ; デフォルトは設定されていません(つまり、引用符は使用されません)
forceCsvQuoteChar true の場合、常に引用符が使用されます いいえ; デフォルトは設定されていません(つまり、引用符は必要な場合にのみ使用されます)
errorproperty エラーが発生した場合に設定するプロパティの名前。 Ant 1.8.0 以降 いいえ
warningproperty 警告が発生した場合に設定するプロパティの名前。 Ant 1.8.0 以降 いいえ
rowcountproperty 実際に行カウントを返した最初のステートメント/トランザクションによって更新された行数に設定するプロパティの名前。 Ant 1.8.0 以降 いいえ

ネストされた要素として指定されたパラメータ

transaction

ネストされた <transaction> 要素を使用して、同じ接続で実行されるが、異なるトランザクションで実行される複数のコマンドブロックを指定します。これは、同じスキーマで実行するファイルが複数ある場合に特に便利です。

属性 説明 必須
src SQL 文を含むファイル タグ内に文が囲まれていない場合は必須

<transaction> 要素は、SQL 文を含むリソースを指定するために、ネストされた要素として任意の リソース または単一要素リソースコレクションをサポートします。

任意の リソース またはリソースコレクション

ネストされたリソースコレクション要素を介して複数のソースを指定できます。コレクションの各リソースは、独自のトランザクションで実行されます。Ant 1.7 より前は、ファイルセットのみがサポートされていました。トランザクションの順序を予測可能にするには、ソートリソースコレクションを使用します。

classpath

Sqlclasspath 属性は、パスのような構造 であり、ネストされた classpath 要素を介して設定することもできます。JDBC クラスをロードするために使用されます。

connectionProperty

Ant 1.8.0 以降

ネストされた <connectionProperty> 要素を使用して、データベースに接続するときに設定する必要がある追加の JDBC プロパティを指定します。

属性 説明 必須
name プロパティの名前 はい
value プロパティの値 はい

org.database.jdbcDriver を使用して sa ユーザーとして url で指定されたデータベースに接続し、data.sql ファイルに含まれる SQL 文を実行します

<sql driver="org.database.jdbcDriver"
     url="jdbc:database-url"
     userid="sa"
     password="pass"
     src="data.sql"/>

org.database.jdbcDriver を使用して sa ユーザーとして url で指定されたデータベースに接続し、data.sql ファイルに含まれる SQL 文を実行します。また、プロパティ internal_logon を値 SYSDBA に設定します。

<sql driver="org.database.jdbcDriver"
     url="jdbc:database-url"
     userid="sa"
     password="pass"
     src="data.sql">
  <connectionProperty name="internal_logon" value="SYSDBA">
</sql>

org.database.jdbcDriver を使用して sa ユーザーとして url で指定されたデータベースに接続し、some_table にデータを挿入し、some_other_table を切り捨てる 2 つの SQL 文を実行します。ネストされたテキスト内の Ant プロパティは展開されません。

<sql driver="org.database.jdbcDriver"
     url="jdbc:database-url"
     userid="sa"
     password="pass">
insert
into table some_table
values(1,2,3,4);

truncate table some_other_table;
</sql>

<>&、またはその他の特殊文字をエスケープする必要がないように、ステートメントを <![CDATA[ ... ]]> セクションで囲むことをお勧めします。例えば

<sql driver="org.database.jdbcDriver"
     url="jdbc:database-url"
     userid="sa"
     password="pass"><![CDATA[

update some_table set column1 = column1 + 1 where column2 < 42;

]]></sql>

次のコマンドは、ネストされたテキストのプロパティ展開をオンにし(純粋に下位互換性のためにオフになっています)、Ant プロパティを使用して HSQLDB データベースに新しいユーザーを作成します。

<sql driver="org.hsqldb.jdbcDriver";
     url="jdbc:hsqldb:file:${database.dir}"
     userid="sa"
     password=""
     expandProperties="true">
  <transaction>
    CREATE USER ${newuser} PASSWORD ${newpassword}
  </transaction>
</sql>

org.database.jdbcDriver を使用して sa ユーザーとして url で指定されたデータベースに接続し、data1.sqldata2.sql、および data3.sql ファイルに含まれる SQL 文を実行し、some_other_table に対して truncate 操作を実行します。

<sql driver="org.database.jdbcDriver"
     url="jdbc:database-url"
     userid="sa"
     password="pass">
  <transaction  src="data1.sql"/>
  <transaction  src="data2.sql"/>
  <transaction  src="data3.sql"/>
  <transaction>
    truncate table some_other_table;
  </transaction>
</sql>

次の例は(123)と同じことを行いますが(パターン data*.sql に一致するファイルがもっとある場合は追加の SQL ファイルを実行する可能性があります)、data1.sqldata2.sql より前に実行されることは保証されません。

<sql driver="org.database.jdbcDriver"
     url="jdbc:database-url"
     userid="sa"
     password="pass">
  <path>
    <fileset dir=".">
      <include name="data*.sql"/>
    </fileset>
  </path>
  <transaction>
    truncate table some_other_table;
  </transaction>
</sql>

org.database.jdbcDriver を使用して sa ユーザーとして url で指定されたデータベースに接続し、data.sql ファイルに含まれる SQL 文を実行し、出力を outputfile.txt にパイプし、ドライバークラスのシステムクラスパスと同様に /some/jdbc.jar を検索します。

<sql driver="org.database.jdbcDriver"
     url="jdbc:database-url"
     userid="sa"
     password="pass"
     src="data.sql"
     print="yes"
     output="outputfile.txt">
  <classpath>
    <pathelement location="/some/jdbc.jar"/>
  </classpath>
</sql>

RDBMS が oracle で、バージョンが 8.1. で始まる場合にのみ、以下が実行されます。

<sql driver="org.database.jdbcDriver"
     url="jdbc:database-url"
     userid="sa"
     password="pass"
     src="data.sql"
     rdbms="oracle"
     version="8.1.">
insert
into table some_table
values(1,2,3,4);

truncate table some_other_table;
</sql>