Sql

説明

データベースに対して一連の 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"
print 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 文がタグに含まれていない場合)

クラスパス

sqlclasspath 属性にはパス類似構造を指定します。 クラスパスはネストした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>