Sql

説明

一連のSQL文をJDBC を通じてデータベースで実行します。 (SQL)文はsrc属性を用いてテキストファイルから読むことも、 SQLタグで括った部分から読むこともできます。

複文はセミコロン (あるいはdelimiterで定義されたもの)により区切ることにより与えられます。 文中の個々の行は行の頭の --、//、または REM を使うことによりコメントアウトできます。

autocommit属性は、 文の実行中に auto-commit オンにするかオフにするかを指定します。 auto-commit がオンの場合、 個々の文毎に実行されコミットされます。 If auto-commit is turned オフの場合、全ての文は一回のトランザクションで実行されます。

onerror 属性は、 複数文のうちの一つの実行の際にエラーが発生した時、 その後どうするかを指定します。 可能な値は次の通りです: continue エラーを表示のみ行い実行を続けます; stop トランザクションの実行とコミットを停止します; abort 実行とトランザクションを異常終了し、タスクを失敗します

パラメータ

属性 説明 必須
driver JDBCドライバのクラス名 Yes
url データベースの接続URL Yes
userid データベースのユーザ名 Yes
password データベースのパスワード Yes
src SQL文の入っているファイル 文がタグで括られない限りYes
encoding SQL文が入ってるファイルのエンコーディング No - デフォルトは JVM のデフォルトエンコーディング
delimiter 複数のSQL文を区切る文字列 No、デフォルトは ";"
autocommit データベース接続のための自動コミットフラグ(デフォルト false) No、デフォルトは"false"
print SQL文の結果セットを表示する(デフォルトfalse) No、デフォルトは"false"
showheaders SQL文の結果セットのヘッダを表示する(デフォルト true) No、デフォルトは"true"
output 結果セットの出力ファイル(デフォルトはSystem.outに出力) No (デフォルトでSystem.outに出力)
append 既存のファイルに出力を追記するか、上書きするか No
classpath ドライバをロードするためのクラスパス No (システムのクラスパスを使う)
classpathref どこかで定義されたパスへの参照として与えられる使用するクラスパス No (システムのクラスパスを使う)
onerror SQL文が失敗した場合に実行するアクション: continue,stop,abort No、デフォルトは"abort"
rdbms 該当するRDBMSに対してのみタスクを実行する No (制限なし)
version 該当するRDBMSのバージョンに対してのみタスクを実行する No (制限なし)
delimitertype Control whether the delimiter will only be recognized on a line by itself.
Can be "normal" -anywhere on the line, or "row", meaning it must be on a line by itself SQL文の区切り文字の認識だけに限らず管理する。 "normal"は、どこでもSQL文の区切りになる。"row"は、1行でSQL文の区切りになる。
No (デフォルト=normal)
keepformat SQLフォーマットに限らず管理する。
パッケージや関数の読込みに有効。
No (デフォルト=false)
escapeprocessing Javaステートメントオブジェクトのエスケープ処理に限らず管理する。
Statement's API docsを参照してください。 Ant 1.6から.
No (デフォルト=true)

ネストされるパラメータにより指定されるパラメータ

transaction

ネストされた<transaction> 要素は、 コマンドのブロック複数のブロックを、 同一コネクション上の別トランザクションとして実行するために使います。 これは同じスキーマに対し、実行するファイルが複数ある場合に特に有用です。

属性 説明 必須
src SQL文が入っているファイル SQL文がタグに含まれない限り Yes

fileset

複数のソースファイルを、 ネストされたファイルセットにより指定可能です。 ファイルセットの個々のファイルは、それぞれ別のトランザクションで実行されます。 一つのファイルセットのファイルの実行順序は定義されていません。

classpath

sql(タスク)の classpath 属性は パスのような構造であり、 ネストされたclasspath要素によっても設定可能です。 これはJDBC クラスをロードするのに使われます。

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

データベースに、 ユーザ sa としてorg.database.jdbcDriver を使って接続し、 ファイル data.sql にある SQL 文を実行します。

<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>
urlで指定されたデータベースに、 ユーザ sa として org.database.jdbcDriver を使って接続し、 some_table へのデータの挿入、および、 some_other_table の全データ削除を行います。

SQL 文を セクションで囲めば、 <>& やその他の特殊文字をエスケープする必要がなくなります。 例えば次の通りです。

<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>

次の例では、 urlで指定されたデータベースに、 ユーザ sa として org.database.jdbcDriver を使って接続し、 data1.sql、data2.sql および data3.sqlにあるSQL文を実行し、 some_other_tableを空にする操作を行います。

<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>

次の例は上と同じ(さらにはパターンdata*.sqlにマッチするほかのファイルがあれば、それを実行します)ですが、 data1.sql が data2.sqlよりも前に実行されることは保障されません。

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

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

<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>

Copyright © 2000-2004 The Apache Software Foundation. All rights Reserved.

[訳注:これは漆島賢二の訳を参考に、横田聡が翻訳しました。日本語訳に対するコメントがあれば report@jajakarta.orgに送ってください]