説明
SQLEXEC
パラメータでは、Oracle GoldenGate処理の範囲でストアド・プロシージャ、問合せまたはデータベース・コマンドを実行します。SQLEXEC
により、Oracle GoldenGateはデータベースと直接通信し、データベースによってサポートされている処理を実行できます。この処理は、列変換のための値の取得など、同期プロセスの一部であっても、データベース内でアクションを実行するストアド・プロシージャの実行など、データの抽出またはレプリケートと関係なくてもかまいません。
SQLEXEC
は、次のように機能します。
パラメータ・ファイルのルート・レベルで、SQLストアド・プロシージャ、問合せまたはデータベース・コマンドを実行する単独文として機能します。単独文としてのSQLEXEC
は、Oracle GoldenGate処理中にTABLE
またはMAP
文から独立して実行されます。単独SQLEXEC
パラメータ内で使用する場合、問合せまたはプロシージャにパラメータを含めることができません。「単独SQLEXEC」を参照してください。
パラメータの有無に関係なくストアド・プロシージャまたは問合せを実行するTABLE
パラメータまたはMAP
パラメータの一部として機能します。パラメータとともに使用する場合、実行されるプロシージャまたは問合せは、ソースまたはターゲット行から入力パラメータを受け付け、出力パラメータを渡すことができます。「TABLEまたはMAPパラメータ内でのSQLEXEC」を参照してください。
注意: データベース、特に本番環境のデータベースに対してSQLEXEC プロシージャを実行する場合は、注意して使用してください。プロシージャによってコミットされた変更は、既存のデータを上書きすることがあります。 |
単独SQLEXEC
単独SQLEXEC
パラメータとは、パラメータ・ファイルのルート・レベルで使用され、TABLE
またはMAP
パラメータと無関係に機能するパラメータです。次に、単独SQLEXEC
パラメータを使用するためのガイドラインを示します。
単独SQLEXEC
文は、他のパラメータも考慮して、パラメータ・ファイルにリストされている順序で実行されます。
SQLEXEC
プロシージャまたは問合せには、すべての例外処理を含める必要があります。
問合せまたはプロシージャは、SQLEXEC
文の実行時に、データベースの有効なSQL構文を使用して正しく構築されている必要があり、そうでない場合、設定されているエラー処理ルールにかかわらず、Replicatは異常終了します。許可されているSQL構文の詳細は、データベース・ベンダーによって提供されているSQLリファレンス・ガイドを参照してください。
Oracle GoldenGateユーザーのデータベース資格証明は、SQLEXEC
句の前に指定する必要があります。Extractの場合は、SOURCEDB
パラメータと、USERID
またはUSERIDALIAS
のいずれかデータベースに適切なパラメータを使用します。Replicatの場合は、TARGETDB
パラメータと、USERID
またはUSERIDALIAS
のいずれか適切なパラメータを使用します。
Oracle GoldenGateプロセスで使用されるデータベース資格証明は、SQLを実行するためのものです。この資格証明は、コマンドおよびストアド・プロシージャの実行権限と、データベース提供のプロシージャのコール権限を持っている必要があります。
単独SQLEXEC
文は、レコードから入力パラメータを受け付けたり、出力パラメータを渡したりするためには使用できません。ストアド・プロシージャおよび問合せをパラメータとともに使用するには、TABLE
またはMAP
文内でSQLEXEC
文を使用します。「TABLEまたはMAPパラメータ内でのSQLEXEC」を参照してください。
単独SQLEXEC
文によって影響を受けるすべてのオブジェクトは、Oracle GoldenGateプロセスの起動前に存在している必要があります。そのため、これらのオブジェクトに対するDDLサポートを無効にする必要があり、無効にしない場合には、SQLEXEC
プロシージャまたは問合せがこれらのオブジェクトに対して実行される前に、DDL操作によってオブジェクトの構造が変更されたり、オブジェクトが削除されることがあります。
オブジェクト名は、2つまたは3つの部分からなる名前の形式で、完全修飾される必要があります。
Oracle GoldenGateは、z/OS上のDB2に対して、ODBC SQLExecDirect
ファンクションを使用してSQL文を動的に実行します。ODBCでは、指定された間隔でSQL文が実行されるたびに、その文が準備されます。このファンクションをサポートするには、SQLを動的に準備するように、接続先のデータベース・サーバーを構成する必要があります。詳細は、z/OS上のDB2のマニュアルを参照してください。
単独SQLEXECの構文
SQLEXEC {'call procedure_name()' | 'SQL_query' | 'database_command'} [EVERY n {SECONDS | MINUTES | HOURS | DAYS}] [ONEXIT] [, THREADS (threadID
[,threadID
][, ...][,thread_range
[,thread_range
][, ...])]
'call
procedure_name ()'
実行するストアド・プロシージャ名を指定します。文は一重引用符で囲みます。call
キーワードは必須です。次に、単独SQLEXEC
を使用したプロシージャの実行方法の例を示します。
SQLEXEC 'call prc_job_count ()'
'SQL_query'
実行する問合せ名を指定します。問合せは一重引用符で囲で囲みます。データベースで必要とされる同じ形式で、大/小文字を区別するオブジェクト名を指定します。次に、単独SQLEXEC
を使用した問合せの実行方法の例を示します。
SQLEXEC ' select x from dual '
複数の行にわたる問合せでは、各行で一重引用符を使用します。最良の結果を得るために、各開始引用符の後ろおよび各終了引用符の前に(または少なくとも各終了引用符の前に)空白を入力してください。
'database_command'
データベース・コマンドを実行します。次に、単独SQLEXEC
を使用したデータベース・コマンドの実行方法の例を示します。
SQLEXEC 'SET TRIGGERS OFF'
EVERY
n
{SECONDS | MINUTES | HOURS | DAYS}
単独ストアド・プロシージャまたは問合せを、次の例のように、定義済間隔で実行します。
SQLEXEC 'call prc_job_count ()' EVERY 30 SECONDS
間隔は、正の整数である必要があります。
ONEXIT
次の例のように、ExtractまたはReplicatプロセスが正常に停止したときにSQLを実行します。
SQLEXEC 'call prc_job_count ()' ONEXIT
THREADS (
threadID
[,
threadID
][, ...][,
thread_range
[,
thread_range
][, ...]
)
調整Replicatの指定スレッドに対してのみSQLEXEC
を実行します。
threadID
[,
threadID
][, ...]
スレッドIDを指定するか、スレッドのカンマ区切りリストをthreadID, threadID, threadID
の形式で指定します。
[,
thread_range
[,
thread_range
][, ...]
スレッドの範囲をthreadIDlow-threadIDhigh
の形式で指定するか、範囲のカンマ区切りリストをthreadIDlow-threadIDhigh
, threadIDlow-threadIDhigh
の形式で指定します。
threadID, threadID, threadIDlow-threadIDhigh
のように、これらの形式を組み合せることができます。
THREADS
句を使用しない場合、ADD REPLICAT
コマンドによってこのReplicatグループに構成されたすべてのスレッドでSQLは実行されます。ただし、SQLがバリア・トランザクションの基準を満たす場合、実際のスレッド・マッピングにかかわらず、SQLEXEC
文全体がスレッド0で処理されます。
TABLEまたはMAPパラメータ内でのSQLEXEC
SQLEXEC
パラメータをTABLE
またはMAP
パラメータ内で使用すると、パラメータの受入れ可否にかかわらず、ストアド・プロシージャまたは問合せを実行できます。次に、MAP
またはTABLE
文内で使用する場合のSQLEXEC
の依存関係および制約事項を示します。
SQLは、Oracle GoldenGateプロセスを実行しているデータベース・ユーザーによって実行されます。このユーザーは、ストアド・プロシージャの実行、およびデータベース提供のプロシージャのコール権限を持っている必要があります。
問合せまたはプロシージャは、SQLEXEC
文の実行時に正しく構築されている必要があります。Replicatは、問合せまたはプロシージャの問題を検出すると、設定されているエラー処理ルールにかかわらず、即座に異常終了します。許可されているSQL構文の詳細は、データベース・ベンダーによって提供されているSQLリファレンス・ガイドを参照してください。
ターゲット・データベースへのReplicatトランザクションのCOMMIT
操作は、元のソース・トランザクションの境界内でSQLEXEC
文で行われるDML変更もすべてコミットします。ExtractはSQLトランザクションを実行しないため、Extractの場合は該当しません。ExtractにSQLEXEC
を使用すると、SQLEXEC
プロシージャ内で暗黙的または明示的なコミットを実行することができます。
リテラルは一重引用符で囲んで指定します。データベースで指定するのと同じ形式で、大/小文字を区別するオブジェクト名を指定します。
SQLEXEC
は、主キー列の値を変更するために使用しないでください。主キーの値は、ExtractからReplicatに渡されます。主キーの値がない場合、Replicat操作は完了できません。主キーの値をSQLEXEC
で変更する必要がある場合は、元のキーの値を別の列にマッピングした後、TABLE
およびMAP
パラメータのKEYCOLS
オプションでこの列を代替キーとして定義することにより、エラーを回避できます。
Oracle GoldenGateは、z/OS上のDB2に対して、ODBC SQLExecDirect
ファンクションを使用してSQL文を動的に実行します。ODBCでは、指定された間隔でSQL文が実行されるたびに、その文が準備されます。このファンクションをサポートするには、SQLを動的に準備するように、接続先のデータベース・サーバーを構成する必要があります。詳細は、z/OS上のDB2のマニュアルを参照してください。
Oracle GoldenGateを使用してDDLをレプリケートする場合は、SQLの実行前に、ストアド・プロシージャまたは問合せに影響を受けるすべてのオブジェクトが、正しい構造で存在している必要があります。したがって、これらのオブジェクトの構造に影響するDDL(CREATE
やALTER
など)は、SQLEXEC
の実行前に実行する必要があります。
SQLEXEC
文中のオブジェクト名はすべて、データベースに応じて、2つまたは3つの部分からなる完全修飾名である必要があります。
データ・ポンプExtractグループにパススルー・モードで処理される表には、SQLEXEC
を使用しないでください。
入力パラメータおよび出力パラメータとしてSQLEXEC
でサポートされるデータ型は次のとおりです。
数値データ型
日付データ型
文字データ型
調整Replicatによって実行される場合、SQLEXEC
は、MAP
文のTHREAD
またはTHREADRANGE
オプションで指定されるスレッドによって実行されます。ただし、SQLEXEC
は、COORDINATED
キーワードを含むMAP
パラメータ内に指定すると、実際のスレッド・マッピングにかかわらず、ID番号が一番小さいスレッドによってバリア・トランザクションとして自動的に実行されます。
TABLEおよびMAP内でのSQLEXECの使用に関するその他の情報
SQLEXEC
の使用方法の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
TABLE
およびMAP
の詳細は、「TABLE | MAP」を参照してください。
TABLEまたはMAP内でのSQLEXECの構文
SQLEXEC ( {SPNAME procedure_name[, ID logical_name] | IDlogical_name
, QUERY 'SQL_query
'} {, PARAMS [OPTIONAL | REQUIRED]parameter_name
= {source_column
|OGG_function
} | NOPARAMS} [, AFTERFILTER | BEFOREFILTER] [, ALLPARAMS {OPTIONAL | REQUIRED}] [, ERROR {IGNORE | REPORT | RAISE | FINAL | FATAL}] [, EXEC {MAP | ONCE | TRANSACTION | SOURCEROW}][, MAXVARCHARLENbytes
] [, PARAMBUFSIZEbytes
] [, TRACE] [, ...] )
SPNAME
procedure_name
[, ID
logical_name
]
ストアド・プロシージャを実行します。
SPNAME
procedure_name
実行するプロシージャ名を指定します。
次に、lookup
という名前のストアド・プロシージャを1回実行する例を示します。このケースでは、実際のプロシージャ名を使用します。論理名は必要ありません。
SQLEXEC (SPNAME lookup), PARAMS (param1 = srccol)), & COLMAP (targcol = lookup.param1);
ID
logical_name
プロシージャの論理名(オプション)を定義します。たとえば、lookup
という名前のプロシージャの論理名をlookup1
、lookup2
などのようにできます。このオプションは、MAP
文内でプロシージャを複数回実行するときに使用します。1つのMAP
文で、プロシージャを最大20回実行できます。プロシージャの実行が1回の場合、ID
は必要ありません。
次に、ID
オプションを使用して、参照表から値を取得するストアド・プロシージャを複数回実行できるようにする例を示します。値は、ターゲット列にマッピングされます。
SQLEXEC (SPNAME lookup, ID lookup1, & PARAMS (long_name = current_residence_state)), & SQLEXEC (SPNAME lookup, ID lookup2, & PARAMS (long_name = birth_state)), & COLMAP (custid = custid, current_residence_state_long = lookup1.long_name, & birth_state_long = lookup2.long_name);
ID
logical_name
, QUERY '
SQL_query
'
問合せを実行します。
ID
logical_name
問合せの論理名を定義します。問合せの結果から値を抽出するには、論理名が必要です。ID logical_name
は、問合せから返された列値を参照します。
QUERY '
SQL_query '
データベースに対して実行するSQL問合せの構文を指定します。問合せは、SELECT
文の結果を返すか、INSERT
、UPDATE
またはDELETE
文を実行できます。SELECT
文は1行のみ返す必要があります。行が複数返される場合は、最初の行のみ処理されます。SELECT
文にはINTO ...
句を指定しないでください。問合せは、問合せを実行するデータベースの有効な標準問合せ言語を使用している必要があります。ほとんどの問合せは、入力パラメータ用のプレースホルダを必要とします。問合せ内でのパラメータの指定方法は、次のようにデータベースのタイプによって異なります。
Oracleの場合は、次の例のように、入力パラメータはコロン(:)を使用して指定し、その後にパラメータ名を続けます。
'SELECT NAME FROM ACCOUNT WHERE SSN = :SSN AND ACCOUNT = :ACCT'
他のデータベースの場合は、次の例のように、入力パラメータは疑問符を使用して指定します。
'SELECT NAME FROM ACCOUNT WHERE SSN = ? AND ACCOUNT = ?'
問合せは1行に収め、一重引用符で囲む必要があります。どのデータベースでも、パラメータ名を引用符で囲む必要はありません。
次に、OracleおよびSQL Serverの問合せにそれぞれSQLEXEC
問合せを使用する例を示します。
Oracleの例:
MAP sales.account, TARGET sales.newacct, & SQLEXEC (ID lookup, & QUERY 'select desc_col into desc_param from lookup_table & where code_col = :code_param', & PARAMS (code_param = account_code)), & COLMAP (newacct_id = account_id, newacct_val = lookup.desc_param);
SQL Serverの例:
MAP sales.account, TARGET sales.newacct, & SQLEXEC (ID lookup, & QUERY 'select desc_col into desc_param from lookup_table & where code_col = ?', & PARAMS (p1 = account_code)), & COLMAP (newacct_id = account_id, & newacct_val = lookup.desc_param);
PARAMS [OPTIONAL | REQUIRED]
parameter_name
=
{
source_column
|
OGG_function
}
|
NOPARAMS
プロシージャまたは問合せがパラメータを受け付けるかどうかを定義し、受け付ける場合はパラメータを入力ソースにマップします。PARAMS
句またはNOPARAMS
のいずれかを使用する必要があります。
OPTIONAL | REQUIRED
パラメータ値が見つからないときに、プロシージャまたは問合せを実行するかどうかを決定します。
OPTIONAL
は、SQLの実行にパラメータ値が必要ないことを示します。必要なソース列がデータベース操作で見つからない場合、またはソース列が見つからないために列変換ファンクションを完了できない場合でも、SQLは実行されます。OPTIONAL
は、Oracle以外のすべてのデータベースのデフォルトです。Oracleでは、ストアド・プロシージャ定義を取得するときに、パラメータがオプションかどうかが自動的に判別されます。
REQUIRED
は、パラメータ値が存在している必要があることを示します。パラメータ値が存在しない場合、SQLは実行されません。
parameter_name
=
{
source_col
umn |
OGG_function
}
パラメータ名を、入力を提供する列またはファンクションにマップします。入力パラメータおよび出力パラメータとしてSQLEXEC
でサポートされるデータ型は次のとおりです。
数値データ型
日付データ型
文字データ型
parameter_name
は、次のいずれかです。
ストアド・プロシージャの場合、プロシージャ内の入力を受け付ける任意のパラメータの名前です。
Oracle問合せの場合、先行するコロンを除いた、問合せの任意の入力パラメータ名です。たとえば、:vemplid
の場合は、PARAMS
句ではvemplid
と指定します。Oracleは、入力パラメータに論理名を付けることを許可します。
SQLEXEC (ID appphone, QUERY ' select per_type from ps_personal_data ' ' where emplid = :vemplid ' ' and per_status = 'N' and per_type = 'A' ', PARAMS (vemplid = emplid)), TOKENS (applid = @GETVAL(appphone.per_type));
Oracle以外の問合せの場合はP
n
(n
は1から始まる文内のパラメータの番号)です。たとえば、パラメータが2つの問合せでは、parameter_name
エントリはp1およびp2
です。データベースによってはp
を大文字または小文字にする必要があることに注意します。
SQLEXEC (ID appphone, QUERY ' select per_type from ps_personal_data ' ' where emplid = ? ' ' and per_status = 'N' and per_type = 'A' ', PARAMS (p1 = emplid)), TOKENS (applid = @GETVAL(appphone.per_type));
source_column
は、入力を提供するソース列の名前です。デフォルトでは、指定した列が(レコードには更新された列の値のみが含まれるために)ログに存在しない場合、このパラメータはプロシージャまたは問合せでこのパラメータに指定されているデフォルト値を使用します。
OGG_function
は、入力を提供するために実行するOracle GoldenGate列変換ファンクションの名前です。「列変換ファンクション」を参照してください。
ストアド・プロシージャまたは問合せからの出力値を入力としてFILTER
またはCOLMAP
句に渡すには、次の構文を使用します。
{procedure_name | logical_name}.parameter
条件:
procedure_name
は、ストアド・プロシージャの実際の名前で、SQLEXEC
文のSPNAME
に指定している値と一致する必要があります。この引数は、Oracle GoldenGate実行中にプロシージャを1回実行する場合にのみ指定します。
logical_name
は、SQLEXEC
のID
オプションで指定した論理名です。この引数は、MAP
文内でプロシージャを複数回実行する場合に、問合せまたはストアド・プロシージャのインスタンスから入力値を渡すときに使用します。
parameter
は、パラメータの名前か、返された値を抽出する場合のRETURN_VALUE
です。デフォルトでは、出力値はパラメータごとに255バイトで切り捨てられます。出力パラメータがこれより長い必要がある場合は、MAXVARCHARLEN
オプションを使用します。
次の例は、Oracleのソース表およびターゲット表と、参照表のセットに適用されます。これらの例では、ストアド・プロシージャの単一インスタンスおよびストアド・プロシージャの複数インスタンスに、これらの表のパラメータを渡す方法を示します。
ソース表cust:
custid Number current_residence_state Char(2) birth_state Char(2)
ターゲット表cust_extended:
custid Number current_residence_state_long Varchar(30) birth_state_long Varchar(30)
参照表state_lookup
abbreviation Char(2) long_name Varchar(30)
次に、参照表から値を取得するために1回実行されるストアド・プロシージャの使用例を示します。cust
表からのレコードを処理するとき、Oracle GoldenGateは、列マップを実行する前にlookup
ストアド・プロシージャを実行します。プロシージャ内のlong_name
パラメータは、birth_state
ソース列からの入力を受け付けます。この値は、COLMAP
文のターゲット列birth_state_long
にマッピングされます。
MAP sales.cust, TARGET sales.cust_extended, & SQLEXEC (SPNAME lookup, & PARAMS (long_name = birth_state)), & COLMAP (custid = custid, & birth_state_long = lookup.long_name);
次に、ID
オプションを使用して、参照表から値を取得するストアド・プロシージャを複数回実行できるようにする例を示します。値は、ターゲット列にマッピングされます。
MAP sales.cust, TARGET sales.cust_extended, & SQLEXEC (SPNAME lookup, ID lookup1, & PARAMS (long_name = current_residence_state)), & SQLEXEC (SPNAME lookup, ID lookup2, & PARAMS (long_name = birth_state)), & COLMAP (custid = custid, current_residence_state_long = lookup1.long_name, & birth_state_long = lookup2.long_name);
AFTERFILTER | BEFOREFILTER
AFTERFILTER
およびBEFOREFILTER
では、MAP
文のFILTER
句との関連でストアド・プロシージャまたは問合せをいつ実行するかを指定します。
AFTERFILTER
FILTER
文の後にSQL文を実行します。これにより、フィルタが成功しない場合にSQL実行のオーバーヘッドを回避できます。これはデフォルトです。
BEFOREFILTER
SQLの結果をフィルタで使用できるように、FILTER
文の前にSQLを実行します。
次に、BEFOREFILTER
の使用例を示します。
SQLEXEC (SPNAME check, NOPARAMS, BEFOREFILTER)
ALLPARAMS [OPTIONAL | REQUIRED]
ALLPARAMS
は、ストアド・プロシージャまたは問合せの実行のために、指定されたすべてのパラメータが存在している必要があるかどうかを決定するグローバル・ルールとして使用します。ALLPARAMS
で設定するグローバル・ルールよりも、PARAMS
句内で設定する個別のパラメータのルールのほうが優先されます。
OPTIONAL
すべてのパラメータが存在しているかどうかにかかわらず、SQLの実行を許可します。これはデフォルトです。
REQUIRED
SQLを実行するために、すべてのパラメータが存在している必要があります。
次に、OPTIONAL
の使用例を示します。
SQLEXEC (SPNAME lookup, PARAMS (long_name = birth_state, short_name = state), ALLPARAMS OPTIONAL)
ERROR {IGNORE | REPORT | RAISE | FINAL | FATAL}
ERROR
では、ストアド・プロシージャまたは問合せに関連するエラーに対するレスポンスを定義します。明示的なエラー処理の指定がない場合、Oracle GoldenGateプロセスはエラーを検出すると異常終了します。プロシージャからプロセスにエラーを返させ、ERROR
でレスポンスを指定するようにしてください。
IGNORE
Oracle GoldenGateに、ストアド・プロシージャまたは問合せに関連するすべてのエラーを無視させ、処理を継続させます。このパラメータ抽出結果は、"紛失した列"状態になります。これはデフォルトです。
REPORT
ストアド・プロシージャまたは問合せに関連するすべてのエラーが破棄ファイルにレポートされるようにします。このレポートは、エラーの原因の追跡に役立ちます。ここには、エラーの説明と、プロシージャまたは問合せとやり取りしたパラメータの値の両方が含まれます。Oracle GoldenGateで、エラーのレポート後、処理が続けられます。
RAISE
REPERROR
パラメータで設定されたルールに従ってエラーを処理します。Oracle GoldenGateは、エラーを処理する前に、現在のMAP
文に関連する他のストアド・プロシージャまたは問合せの処理を続行します。
FINAL
RAISE
と似ていますが、プロシージャまたは問合せに関連するエラーを検出したときに、残りのストアド・プロシージャおよび問合せがバイパスされます。エラー処理は、エラーの直後に起動されます。
FATAL
プロシージャまたは問合せに関連するエラーを検出したときに、即座にOracle GoldenGateを異常終了させます。
EXEC {MAP | ONCE | TRANSACTION | SOURCEROW}
EXEC
では、MAP
文のストアド・プロシージャまたは問合せを実行する頻度、および出力パラメータを抽出する場合に結果を有効とみなす期間を制御します。
MAP
プロシージャまたは問合せが指定されている各ソース-ターゲットのマップで、プロシージャまたは問合せを1回実行します。MAP
を使用する場合、同一のソース表を持つそれ以降のマップでは結果は無効になります。MAP
はデフォルトです。
次に、デフォルトのMAP
の誤った使用例を示します。MAP
はデフォルトであるため、SQLEXEC
文に明示的にリストする必要はありません。この例では、1つのソース表を別個のMAP
文で2つの異なるターゲット表にマップしています。この場合、結果は最初のマッピングに対してのみ有効です。プロシージャlookup
の結果は、2番目のMAP
パラメータの実行までに無効になってしまい、2番目のMAP
は"紛失した列"の状態になります。各MAP
が有効な結果を返すようにこの機能を正しく実装するには、SOURCEROW
を使用する必要があります。
MAP sales.srctab, TARGET sales.targtab, & SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol)), & COLMAP (targcol = lookup.param2); MAP sales.srctab, TARGET sales.targtab2, & COLMAP (targcol2 = lookup.param2);
ONCE
Oracle GoldenGateの実行中、関連するMAP
文の最初の呼出し時にプロシージャまたは問合せを1回実行します。結果は、プロセスが実行しているかぎり有効です。
次に、ONCE
の使用例を示します。
MAP sales.cust, TARGET sales.cust_extended, & SQLEXEC (SPNAME lookup, PARAMS (long_name = birth_state), EXEC ONCE), & COLMAP (custid = custid, & birth_state_long = lookup.long_name);
TRANSACTION
プロシージャまたは問合せをソース・トランザクションで1回実行します。結果は、トランザクションのすべての操作に有効です。
次に、TRANSACTION
の使用例を示します。
MAP sales.cust, TARGET sales.cust_extended, & SQLEXEC (SPNAME lookup, PARAMS (long_name = birth_state), EXEC TRANSACTION), & COLMAP (custid = custid, & birth_state_long = lookup.long_name);
SOURCEROW
プロシージャまたは問合せをソース行操作で1回実行します。このオプションは、ソース表を複数のターゲット表と同期し、プロシージャまたは問合せの結果がソース-ターゲット・マッピングのたびに呼び出される場合に使用します。
次に、SOURCEROW
の使用例を示します。このケースでは、プロシージャが各ソース行操作で実行されるため、2番目のMAPは有効な値を返します。
MAP sales.srctab, TARGET sales.targtab, & SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol), EXEC SOURCEROW), & COLMAP (targcol = lookup.param2); MAP sales.srctab, TARGET sales.targtab2, & COLMAP (targcol2 = lookup.param2);
MAXVARCHARLEN
bytes
MAXVARCHARLEN
では、ストアド・プロシージャまたは問合せ内のパラメータの出力値に割り当てる最大バイト長を指定します。この最大値を超える出力値は切り捨てられます。明示的にMAXVARCHARLEN
句を使用しない場合のデフォルトは、255バイトです。有効な値の範囲は、Oracle TimesTenの場合を除き、50から32767バイトです。Oracle TimesTenの最大出力値は2560バイトです。
次に、出力値のバイト長を100に制限する例を示します。
MAXVARCHARLEN 100
PARAMBUFSIZE
bytes
PARAMBUFSIZE
では、入力パラメータと出力パラメータの両方を含むSQLEXEC
パラメータ情報を保持するメモリー・バッファに許可する最大バイト数を指定します。明示的にPARAMBUFSIZE
句を使用しない場合のデフォルトは、10,000バイトです。有効な値の範囲は、1000から2000000バイトです。Oracle GoldenGateは、パラメータに割り当てられたメモリーと最大値との差が500バイト以内に達するたびに警告を発行します。
次に、バッファを15,000バイトに増やす例を示します。
PARAMBUFSIZE 15000
TRACE {ALL | ERROR}
TRACE
では、SQLEXEC
の入力および出力パラメータをレポート・ファイルに記録します。
次に、SQLEXEC
トレースが有効になっているレポート・ファイルの例を示します。
Input parameter values... LMS_TABLE: INTERACTION_ATTR_VALUES KEY1: 2818249 KEY2: 1 Report File: From Table MASTER.INTERACTION_ATTR_VALUES to MASTER.INTERACTION_ATTR_VALUES: # inserts: 0 # updates: 0 # deletes: 0 # discards: 1 Stored procedure GGS_INTERACTION_ATTR_VALUES: attempts: 2 successful: 0
ALL
呼び出された各プロシージャまたは問合せの入力および出力パラメータをレポート・ファイルに書き込みます。これはデフォルトです。
ERROR
SQLエラーの発生後にのみ、呼び出された各プロシージャまたは問合せの入力および出力パラメータをレポート・ファイルに書き込みます。