データベースに対して一連の SQL 文を JDBC 経由で実行します。 SQL 文は src 属性を使ってファイルから読むことも、sql タグの間に記述することもできます。
複数の SQL 文を記述する場合は、文をセミコロンで区切ります。 SQL 文の中では -- や // を行の先頭に置くことで行をコメントアウトすることができます。
auto-commit 属性で SQL 文を実行する際に自動コミットをするかどうか指定します。 自動コミットがオンの場合、一つ一つの文が実行されるたびにコミットされます。 オフの場合には、SQL 文すべてが一つのトランザクションとして実行されます。
onerror 属性は SQL 文を実行している間にエラーが起きた場合の処理方法を 指定します。指定できる値は以下の通りです。 continue エラーを表示するだけで実行を続けます。 stop 処理を中止してトランザクションをコミットします。 abort トランザクションを中止してタスクを fail させます。
属性 | 説明 | 必須 |
driver | JDBC ドライバのクラス名 | Yes |
url | データベース接続の URL | Yes |
userid | データベースのユーザ名 | Yes |
password | データベースのパスワード | Yes |
src | SQL 文を含むファイル | Yes(SQL 文がタグに含まれていない場合) |
autocommit | データベース接続の自動コミットフラグ(デフォルトは false) | No, デフォルトでは "false" |
SQL 文の実行結果を出力する(デフォルトは false) | No, デフォルトでは "false" | |
showheaders | SQL 文の実行結果のヘッダを出力する(デフォルトは true) | No, デフォルトでは "true" |
output | 実行結果を出力するファイル (デフォルトは System.out) | No (デフォルトでは System.out に出力) |
classpath | ドライバをロードするためのクラスパス | No (システムのクラスパスを使用) |
onerror | SQL が失敗した時の動作: continue, stop, abort | No, デフォルトでは "abort" |
rdbms | 該当する RDBMS に対してのみ実行する | No (制限なし) |
version | RDBMS のバージョンがマッチする場合にのみ実行する | No (制限なし) |
ネストした<transaction>
要素は、
コマンドの複数のブロックを、
同じコネクション上の別のトランザクションとして実行するために使用します。
これは同じスキーマに対して複数のファイルを実行したい場合に特に有用です。
Attribute | Description | Required |
src | SQL 文を含むファイル | Yes (SQL 文がタグに含まれていない場合) |
sql
の classpath 属性にはパス類似構造を指定します。
クラスパスはネストしたclasspath 要素でも設定できます。
これは JDBC のクラスをロードするために使用します。
<sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass" src="data.sql" />
url で指定されたデータベースに、ユーザ sa として org.dabase.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.dabase.jdbcDriver を使って接続し、 2つの SQL を実行して some_table にデータを挿入し、some_other_table を空にします。
Note that you may want to enclose your statements in
<![CDATA[
... ]]>
sections so you don't
need to escape <
, >
&
or other special characters. For example:
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>
次の例では、url で指定されたデータベースに、 ユーザ sa として org.dabase.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>
次の例では、url で指定されたデータベースに、 ユーザ sa として org.dabase.jdbcDriver を使って接続し、 data.sql に含まれている SQL 文を実行して出力を outputfile.txt にパイプします。 システムのクラスパス以外に /some/jdbc.jar も JDBC ドライバのクラスをロードするために検索します。
<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>