# Oracle コネクターの使用
このガイドでは、Oracle コネクターを使用するためのヒントとこつについて説明します。
# テーブル、ビュー、およびストアドプロシージャ
Oracle データベースへの接続が成功し、レシピでアクション/トリガーを選択したら、多くの場合、テーブル、ビュー、またはストアドプロシージャのいずれかを選択するよう求められます。これにより、データをプルまたは送信する対象の Workato に指示します。
# テーブルおよびビュー
Oracle コネクターはすべてのテーブルおよびビューと連携します。ユーザーは、それらを各トリガー/アクションのピックリストで利用することも、正確な名前を指定することもできます。ビューもテーブルと同様に呼び出して使用することができます。
# ストアドプロシージャ
ストアドプロシージャは、Oracle データベース内で作成され保存された、カスタム作成によるワークフローです。行の作成、更新、および削除など、幅広い機能を実行できます。パラメータを受け入れることもできます。Workato でストアドプロシージャを使用する方法の詳細については、こちらをご覧ください。
# WHERE
条件の使用
この入力項目を使用すると、アクションを実行する対象行をフィルタリングして識別できます。以下のように、複数のトリガーおよびアクションで使用できます。
- トリガーで取得する行をフィルタリングする
- Select rows アクションで行をフィルタリングする
- Delete rows アクションで削除する行をフィルタリングする
TIP
以下の例では、ユーザー入力で直接 WHERE 条件を使用する方法を示しています。セキュリティを強化するには、WHERE 条件をパラメータとともに使用して SQL インジェクションを防止するようにしてください。詳細については、こちらを参照してください。
この句は各リクエストの WHERE
ステートメントとして使用され、これは基本的な SQL 構文に従っている必要があります。Oracle ステートメントを記述するためのルールの完全なリストについては、こちらの Oracle のドキュメント (opens new window)を参照してください。
# 演算子
演算子はあらゆる WHERE
ステートメントの基盤であり、Workato で返される行をフィルタリングして識別する上で役立ちます。SQL と同様の方法で演算子を連結することで、Workato から直接、データに対する堅牢で複雑なフィルターを作成できるようになります。
演算子のリストについてはこちらをクリックしてください。
演算子 説明 例 = 等しい WHERE ID = 445
!=
<>等しくない WHERE ID <> 445
>
>=より大きい
以上WHERE PRICE > 10000
<
<=より小さい
以下WHERE PRICE > 10000
IN(...) 値のリスト WHERE ID IN(445, 600, 783)
LIKE ワイルドカード文字 ( %
と_
) を使用したパターンマッチングWHERE EMAIL LIKE '%@workato.com'
BETWEEN 範囲を指定して値を取得 WHERE ID BETWEEN 445 AND 783
IS NULL
IS NOT NULLNULL 値のチェック
NULL 以外の値のチェックWHERE NAME IS NOT NULL
# データ型
WHERE
条件の他の構成要素では、これらの演算子を適切なデータ型と組み合わせて使用する必要があります。WHERE
ステートメントを作成する際、テーブル内の data type = integer
である変数は、data type = string
ではなく data type = integer
である変数と比較するようにしてください。
Workato では、以下のアクションの選択時、各入力項目に予期されるデータ型がわかるようにもしています。
- Update rows アクション
- Upsert rows アクション
このデータ型は出力項目のすぐ下に表示されるため、レシピを構築する際、送信されると予想されるデータ型を知ることができます。これらのヒントを使用して適切なデータ型を Oracle データベースに送信してください。そうでない場合、予期しない動作やジョブの失敗につながる恐れがあります。
予想される一般的なデータ型を以下に示しています。より包括的なリストについては、こちら (opens new window)をご覧ください。
一般的なデータ型のリストについてはこちらをクリックしてください。
データ型 説明 例 number NUMBER データ型は、ゼロ、正および負の固定数を格納します。 -100
,1
,30,000
FLOAT FLOAT データ型は、NUMBER のサブタイプです。精度の有無を指定できます。スケールは指定できませんが、データから解釈されます。各 FLOAT 値には1から22バイトが必要です。 1.11
,2.0761
,1.61803398875
YEAR 有効な値は、0年を除く -4712~9999です。 1
,245
,100
MONTH 01-12 1
DAY 01-31 1
,0
,15
VARCHAR2(n) 長さが n
の可変長文字列。Foo_bar
nchar(n) 長さが n
の固定長文字列。Foo
where n = 3TIMESTAMP 1753年1月1日~9999年12月31日 (3.33ミリ秒の精度) 2011-09-16 13:23:18.767
# WHERE
条件の作成
演算子とデータ型について理解できたら、次は WHERE
条件を作成してみましょう。文字列値は一重引用符 (''
) で囲む必要があります。また、使用する列はテーブル/ビューに存在していなければなりません。
単一列の値に基づいて行をフィルタリングする単純な WHERE
条件は、以下のようになります。
currency = 'USD'
Select rows アクションで使用すると、この WHERE
条件は currency
列の値が「USD」であるすべての行を返します。入力の際にデータピルを一重引用符で囲むことを覚えておいてください。
標準的なルールに従わない列名 (スペース、小文字、または特殊文字を含む) は、二重引用符 (""
) で囲む必要があります。たとえば、 PUBLISHER NAME を有効な識別子として使用するには、バッククォートで囲まれなければなりません。
"PUBLISHER NAME" = 'USD'
WHERE
条件を使用して実行できる機能の詳細については、以下のタブをクリックしてください。
WHERE
条件でAND
およびOR
を使用するWHERE
条件は、AND
やOR
などの基本的な SQL 論理演算子と組み合わせて使用し、返す行にさらにフィルターを追加することもできます。("currency code" = 'USD' AND totalAmt >1000) OR totalAmt>2000
上記の
WHERE
条件は、currency code
列に値 'USD' を含み、かつ (AND
)totalAmt
列が1000より多いか、または (OR
)totalAmt
列が2000より多いすべての行を返します。
WHERE
条件でサブクエリーを使用する
WHERE
条件にサブクエリーを含めることもできます。以下のクエリーはusers
テーブルに対して使用できます。ID IN (SELECT "USER ID" FROM TICKETS WHERE PRIORITY >= 2)
これを Delete rows アクションで使用すると、
tickets
テーブル内の1つ以上の関連付けられた行でpriority
列の値が2である、users
テーブル内のすべての行が削除されます。サブクエリーを含む WHERE
条件でデータピルを使用する
# パラメータの使用
パラメータを WHERE
条件と組み合わせて使用すれば、SQL インジェクションに対するセキュリティを強化することができます。パラメータを WHERE
条件で使用するには、まず入力でバインド変数を宣言する必要があります。バインド変数は :bind_variable
の形式で宣言する必要があります。変数名の前には :
が付きます。これが終わったら、直下のセクションで、指定した変数名を使用してパラメータを宣言します。
TIP
バインド変数は、列の名前ではなく、列の値の代わりにのみ使用する必要があります。
バインド変数は必要に応じていくつでも使用できますが、それぞれ固有の名前を指定する必要があります。一重引用符 ('
)、二重引用符 ("
)、および角括弧 ([]
) 内のすべての :
を無視することで、バインド変数を列名および静的値から区別します。
# トリガーの設定
Oracle コネクターには、新規行と更新行の両方に対するトリガーがあります。トリガーが機能するには、両方の [Unique keys] を設定する必要があります。最近更新された行をトリガーで見つけられるようにするには、 [Sort columns] を設定してください。
テーブルをトリガーで使用するには、いくつかの制約を満たす必要があります。特定の制約の詳細については、以下のセクションで説明します。Workato で使用するテーブルを準備する方法のベストプラクティスについては、こちらをご覧ください
# Unique keys (一意のキー)
これはすべてのトリガーと一部のアクションにおいて必須の入力項目です。この列の値は、選択したテーブル内で行を一意に識別するために使用されます。そのため、選択した列の値は一意である必要があります。通常、この列はテーブルのプライマリキー (ID
など) になります。
トリガーで使用する場合、これは増分列である必要があります。トリガーはこの列の値を使用して新規行を見つけるため、この制約が必要です。ポーリングのたびに、トリガーは、以前の最大値よりも大きな一意のキー値を持つ行を照会します。
詳細な例についてはこちらをクリックしてください。
簡単な例を使ってこの動作を説明します。あるテーブルの行を処理した New row トリガーがあるとします。このトリガーに対して設定された [Unique key] はID
です。最後に処理された行には、ID
値として100
が設定されています。次のポーリング時、トリガーは新規行を見つける条件として>= 101
を使用します。 [Unique key] として使用するよう選択した列にインデックスを付けると、トリガーのパフォーマンスが向上します。
# Sort column (列の並べ替え)
これは New/updated row トリガー において必須の項目です。この列の値は、更新された行を識別するために使用されます。
行の更新時、 [Unique key] の値は変わりません。ただし、 [Sort column] は、最後の更新日時を反映するように更新されます。このロジックに従い、Workato ではこの列の値を、選択した [Unique key] 列の値と合わせて追跡します。 [Sort column] の値の変更が検出されると、更新された行のイベントがトリガーにより記録され、処理されます。
Oracle データベースの場合、 date 、 timestamp 、 timestamp with time zone 、および timestamp with local time zone の列型のみ使用できます。
詳細な例については、こちらをクリックしてください。
簡単な例を使ってこの動作を説明します。あるテーブルの行を処理した new/updated row トリガーがあるとします。このトリガーに設定された [Unique key] と [Sort column] は、それぞれID
とUPDATED_AT
です。最後に処理された行には、100
のID
値と、2018-05-09 16:00:00.000000
のUPDATED_AT
値が設定されています。次のポーリング時、トリガーは以下の2つの条件のいずれかを満たす新規行を照会します。
1.UPDATED_AT'2018-05-09 16:00:00.000000'
2.ID
> 100 ANDUPDATED_AT = '2018-05-09 16:00:00.000000'
# 単一行のアクション/トリガーの使用とバッチ行のアクション/トリガーの使用
Oracle コネクターでは、単一行またはバッチ行でデータベースの読み取りや書き込みを実行できます。バッチ行を使用したトリガー/アクションでは、操作するバッチのサイズを入力する必要があります。バッチサイズには1~100の間の任意の数字を指定できます。最大バッチサイズは100です。このトリガーおよびアクションは、大量の行の読み取り、作成、または更新が想定されるジョブに最適です。ジョブを個別に分割して実行する代わりにバッチ処理することで、操作を簡素化できるだけでなく、レシピの実行時間を短縮し、サーバーの負荷を軽減できます。
これら2つの操作には、入力項目の違いに加えて、出力にも違いがあります。一度に1つの行を処理するトリガーには、その単一行のデータをマッピングできる出力データツリーがあります。
それに対して、複数行をバッチ処理するトリガーは、それらを行の配列として出力します。Rows データピルは、出力がそのバッチ内の各行のデータを含むリストであることを示しています。
そのため、バッチトリガー/アクションの出力は異なる方法で処理する必要があります。このレシピ (opens new window)では、users
テーブル内の新規行についてバッチトリガーを使用します。トリガーの出力は、Rows データピルをソースリストにマッピングする必要がある Salesforce のバルクアップサートアクションで使用されます。
バッチトリガー/アクションの出力は、特にリストを使用するアクションの外部で使用することもできます。Workato のリピートステップを使用すれば、バッチ出力を制御して、単一行を処理するよう作成されたアクションで使用することができます。
バッチアクションと単一行アクションをいつ使用すべきか判断に迷う場合は、レシピの設計のヒントを紹介したベストプラクティスのセクションをご覧ください。
# スマートブール型変換
Oracle にはブール型の列タイプが組み込まれていません。一般的な回避策は、CHECK (COLUMN_NAME IN(1,0))
制約を持つ NUMBER(1,0)
列を使用することです。この場合、他のアプリケーションからの標準的な値がこの列に適切にマッピングされないため、予期しない値になったり、エラーが発生したりする可能性があります。
このチェックボックスをチェックすると、自動スマート変換を有効にすることができます。 [Yes] に設定すると、NUMBER
型で精度が 1
のすべての列に対して変換が行われます。これにより、レシピでデータピルを変換する際に必要な設定量を減らすことができます。次の表は、ブール型変換のロジックを説明するものです
入力値 | 変換後の値 |
---|---|
true | 1 |
false | 0 |
"true" | 1 |
"false" | 0 |
Last updated: 2023/8/31 1:07:14