SQL 実行

選択したデータベースで SQL ステートメントを実行するには、このステップを使用します。createupdateinsertdeletedrop などの SQL コマンドを使用して、データベースのレコードを変更できます。call コマンドを使用してストアド プロシージャを実行することもできます (例: call add_record("name"))。データベースからレコードを読み取るには、「データベース照会」ステップを使用します。データベースにデータを保存するには、「データベース データ登録」ステップを使用します。

プロパティ

以下のプロパティを使用して「SQL 実行」ステップを設定します。

データベース マッピング
ロボットの呼び出し」ステップで指定されたデータベースからデータベース マッピングを選択します。
SQL ステートメント
選択したデータベースで実行する SQL ステートメントを入力します。

ロボットは入力したステートメントを評価しません。事前に SQL ステートメントを確認してください。そうしないとステップを実行してステートメントの有効性を確認するしかありません。

データベース データ登録」または「SQL 実行」ステップで使用されるデータベースのテーブルを削除または変更しないでください。

変更された行
選択した場合、整数型の変数を指定して、SQL ステートメントによって変更された行の数をステップの出力として取得できます。
ステートメント タイプ
リストからステートメント タイプを選択します。
準備されたステートメント
このステートメント タイプを使用して、効率よく SQL ステートメントを繰り返し実行します。準備されたステートメントは、実際の値の代わりにパラメータ プレースホルダを使用して記述されたクエリです (例: SELECT * FROM MyTable WHERE string = ?)。任意の SQL ステートメントを指定できますが、[入力値] パラメータのみを使用するように制限されています。また、DBMS および JDBC ドライバーが準備されたステートメントをサポートしていることを確認してください。
ストアド プロシージャ コール
このステートメント タイプを使用して、ストアド プロシージャを呼び出します。例: CALL db.Procedure(?)? = CALL db.Procedure(?)、ここで、「?」はパラメータのプレースホルダとして機能します。ストアド プロシージャ コールは 「CALL」 で開始し、必要に応じて戻り値パラメータを指定する必要があります。また、[入力値] パラメータと [出力値] パラメータの両方をサポートします。
パラメータ
準備されたステートメントとストアド プロシージャ コール ステートメントの両方のタイプに、さまざまなパラメータを追加できます。クエリ内のクエスチョン マーク (?) はパラメータのプレースホルダであり、パラメータの順序に対応しています。

使用するクエリ:

SELECT * FROM MyTable WHERE string = ? AND int = ?

パラメータ:

  • content

  • 123

クエリは自動的に SELECT * FROM MyTable WHERE string = content AND int = 123 に変換されます。

このステップで定義するパラメータは、式として使用できます。これにより、クエリ パラメータを動的に定義できます。ユーザー入力によるエラーやインジェクションを防ぐために、すべてのシナリオでこのパラメータ置換を使用することをお勧めします。

ストアド プロシージャ コール ステートメントの場合、[入力値]、[出力値]、または [入力値/出力値] パラメータを選択できます。

  • [入力値] パラメータは、式としてロボットに入力されます。それらの値は、クエリに配置される前に評価されます。

  • [出力値] パラメータは、値を返すために使用され、SQL 変数タイプの選択もサポートします。パラメータ タイプと SQL 変数タイプは一致する必要があります。一致しないと、エラーが返されます。詳細については、このセクションの後半を参照してください。

  • [入力値/出力値] パラメータも SQL 変数タイプの選択をサポートし、[出力値] パラメータとして機能します。ただし、選択した変数の現在の値を [入力値] として使用します。

[出力値] または [入力値/出力値] パラメータ タイプを選択すると、[手動パラメータの詳細] チェック ボックスが表示され、必要に応じて SQL パラメータ タイプを選択し、そのスケールを指定できます。通常、これらの詳細は自動的に取得されますが、一部の JDBC ドライバーはこれをサポートしていないため、タイプを手動で設定する必要があります。

リストから SQL 変数タイプを選択するときは、それが [ストアド プロシージャ コール] フィールドで定義されたパラメータ タイプと一致していることを確認してください。必要な SQL 変数タイプがリストに見つからない場合は、ロボットで使用できないことを意味します。

スケールは、NUMERIC または DECIMAL 値の区切り記号の右側の桁数を表します。NUMERIC および DECIMAL タイプのパラメータにはスケールが必須であり、指定する必要があります。たとえば、パラメータ タイプ NUMERIC(24,12) を入力すると、スケール値は 12 になります。

[出力値] または [入力値/出力値] パラメータから返される値は、それぞれのロボット値にマップされます。次の表に、ロボット パラメータ タイプとそれぞれの SQL 変数タイプを示します。

ロボット パラメータ タイプ SQL 変数タイプ

整数

BIGINT、INTEGER、SMALLINT、TINYINT

Number

DECIMAL、DOUBLE、FLOAT、NUMERIC、REAL

テキストまたはパスワード

CHAR、CLOB、DATALINK、LONGVARCHAR、LONGNVARCHAR、NCHAR、NCLOB、NVARCHAR、ROWID、SQLXML、VARCHAR

ブール値

BIT、BOOLEAN

バイナリ

BINARY、BLOB、LONGVARBINARY、VARBINARY

Time

TIME、TIME_WITH_TIMEZONE

Date

DATE

DateTime

TIMESTAMP、TIMESTAMP_WITH_TIMEZONE

構成された JDBC ドライバーは、ロボットの値をクエリ値に変換します。変換プロセスは、JDBC のバージョン、DBMS のタイプ、バージョン、設定など、さまざまな要因によって異なります。パラメータを適用できるように、式の値を変換するか、クエリを手動で調整する必要がある場合があります。

特に、日付と時刻の値は手動による変換が必要になる場合があります。これは、デフォルトでタイム ゾーン付きの日付と時刻の値をサポートする JDBC ドライバーがほとんどないためです。以下は、DBMS ごとの値の例です。

  • IBM DB2

    入力された日時の値の形式をタイム ゾーンなしの文字列にする必要がある場合があります。

    : yyyy-MM-dd HH:mm:ss.SS

  • Microsoft SQL Server

    入力された日時の値の形式を文字列にする必要がある場合があります。

    : yyyy-MM-dd HH:mm:ss.SSSSSSS xxx

    [入力値/出力値] パラメータに Number 変数タイプを使用すると、ストアド プロシージャで明示的な変換を行っても、[出力値] が [入力値] の精度を達成する場合があります。

    可能であれば [出力値] パラメータを使用し、それ以外の場合は [入力値] パラメータに対して適切で正確な値を使用します。

    : パラメータが [入力値/出力値] として設定されている場合、NUMERIC 値を 「1.2」 に設定するストアド プロシージャはその値を 「1.0」 として返すことがあり、初期値の精度は 1 (0.0 または 1 など) のみでした。

  • MySQL

    日時の値の形式をタイム ゾーンなしの文字列にする必要がある場合があります。

    : yyyy-MM-dd HH:mm:ss

  • Oracle

    日時の値の形式を文字列にする必要がある場合があります。

    : dd-MMM-yyyy HH:mm:ss.SS a xxx

    タイムゾーンなしの例: dd-MMM-yyyy HH:mm:ss.SS a

    日時の形式はロケールに大きく依存する可能性があることに注意してください。

    ストアド プロシージャから整数全体を返すことはサポートされていない場合があります。これを修正するには、ロボットの式で round() メソッドを使用します。

    以前のバージョンの JDBC ドライバーでは、パラメータ タイプとスケールを自動的に判別できない場合があることに注意してください。

  • PostgreSQL

    日時の値の形式を文字列にする必要がある場合があります。

    : yyyy-MM-dd HH:mm:ss.SS xxx

    また、クエリ内で変換が必要になる場合があります。

    : to_timestamp(?, 'yyyy-MM-dd hh24:mi:ss.us xxx')

    JDBC ドライバーのすべてのバージョンで、パラメータ タイプとスケールを自動的に判別できない場合があることに注意してください。すべてが「その他」タイプとして報告されますが、これはロボットではサポートされていません。変数タイプを手動で選択した場合でも、クエリの各パラメータを明示的にキャストする必要がある場合があります。

    : 'call db.proc(? :: character varying)'。ここでパラメータは VARCHAR タイプです。

    デフォルトでは、関数呼び出しのみがサポートされています。実際のストアド プロシージャを使用するには、Management Console で接続 URL プロパティ 'escapeSyntaxCallMode' を 'call' または 'callIfNoReturn' に設定する必要がある場合があります。