xref:populateLookupXRefRow関数
xref:populateXRefRow
関数と同様に、xref:populateLookupXRefRow
関数では相互参照列に単一の値が移入されます。xref:populateXRefRow
関数とは異なり、xref:populateLookupXRefRow
関数では、同じIDのレコードが同時に追加されたときに一意制約の違反エラーはスローされません。かわりに、ルックアップとして動作してエラーの原因となった既存のソース値を返し、処理フローを停止しません。xref:populateXRefRow
関数の使用時に発生する可能性がある同時性の問題を解決するには、この関数を使用します。
xref:populateLookupXRefRow
関数は文字列値を返します。この文字列値は、移入される相互参照値か、または一意制約の違反がある場合は、最初にコミットされたスレッドによってすでに移入されている相互参照値になります。たとえば、表44-8に示すXREF_CUSTOMER_DATA
表には、EBS
、Common
およびSBL
という列があります。xref:populateLookupXRefRow
関数は、2つのスレッドによって、次の値を使用して並行して起動されます。
-
スレッド1:
xref: populateLookupXRefRow ("default/xref/example.xref", "EBS", "EBS100", "Common" "CM001", "ADD")
-
スレッド2:
xref: populateLookupXRefRow ("default/xref/example.xref", "EBS", "EBS100", "Common" "CM002", "ADD")
表44-11に示すように表に移入されます。スレッド1が最初にコミットされるため、スレッド2はコール元に「CM001」を返します。
表44-11 xref:populateLookupXRefRowによって移入される相互参照表
EBS | Common | SBL |
---|---|---|
|
|
次の例は、xref:populateLookupXRefRow
関数の構文を示しています。
xref:populateLookupXRefRow(xrefMetadataURI as string, xrefReferenceColumnName as string, xrefReferenceValue as string, xrefColumnName as string, xrefValue as string, mode as string) as string
パラメータ
-
xrefMetadataURI
: 相互参照表URI。 -
xrefReferenceColumnName
: 参照列の名前。 -
xrefReferenceValue
: 参照列名に対応する値。 -
xrefColumnName
: 移入される列の名前。 -
xrefValue
: 列に移入される値。 -
mode
:xref:populateXRefRow
関数の列移入モード。ADD
またはLINK
を指定できます。表44-10に、これらのモードと各モードの例外条件を示します。
ノート:
modeパラメータ値には大/小文字区別があり、大文字のみで指定する必要があります。
表44-12 xref:populateLookupXRefRow関数のモードと結果
モード | 参照値 | 追加される値 | 結果 |
---|---|---|---|
|
|
|
正常終了 例外(例外が一意制約違反の場合にのみ成功) 例外(例外が一意制約違反の場合にのみ成功) |
|
|
|
例外 正常終了 例外 |
使用上のノート
-
カスタム表の方法を使用する場合は、相互参照表で一意であることが必要な列に対して、主制約を追加する必要があります。表44-11を例として使用すると、SQL文は次のようになります:
alter table xref_customer_data add constraint xref_vnx_data_pk primary key (common, ebs);
最初に主制約列に移入してから、後続のコールで残りの列に移入します。
-
データの非一貫性の問題が隠される可能性があるため、プライマリ・オブジェクトの相互参照を追加するためにこの関数を使用しないでください。主要な依存オブジェクトに対するセカンダリ・オブジェクトにのみこの関数を使用します。たとえば、顧客アカウントを作成する際にアカウントがすでに存在するかどうかを確認するためにこの関数を使用しないでください。これらの顧客アカウントの住所が同期されている場合に使用してください。