事前定義済ビュー
Oracle Blockchain Platform Digital Assets Editionには、次の事前定義済データベース・ビューが用意されています。
-
ACCOUNT_TRANSACTION_VIEW - このビューは、トランザクションの借方側(
from_account_id)と貸方側(to_account_id)の両方を取得して、勘定科目ごとに統一されたトランザクション履歴を提供します。このビューを使用して、RAWチェーンコード状態データをスキャンせずに、アカウントにリンクされているすべてのトランザクションを問い合せることができます。 - 機密SQL問合せ、システム所有者:
CREATE VIEW ACCOUNT_TRANSACTION_VIEW as SELECT tx."VALUEJSON".from_account_id AS "KEY", tx."VALUEJSON".transaction_id AS "TRANSACTION_ID", tx."VALUEJSON" AS "TRANSACTION_DETAILS", COALESCE(CAST(tx."VALUEJSON".blockNo AS NUMBER), tx."BLOCKNO") AS ORDER_BLOCKNO, COALESCE(CAST(tx."VALUEJSON".txnNo AS NUMBER), tx."TXNNO") AS ORDER_TXNNO FROM "<obpInstanceName>_<channelName>_state" tx WHERE tx."CHAINCODEID" = '<chaincodeName>' AND tx."VALUEJSON".assetType = 'otransaction' AND tx.KEY NOT LIKE '_obp2pc_' AND tx."VALUEJSON".transaction_type NOT IN ('EXECUTE_HOLD_RECEIVER', 'CREATE_ACCOUNT') AND tx."VALUEJSON".from_account_id IS NOT NULL UNION ALL SELECT tx."VALUEJSON".to_account_id AS "KEY", tx."VALUEJSON".transaction_id AS "TRANSACTION_ID", tx."VALUEJSON" AS "TRANSACTION_DETAILS", COALESCE(CAST(tx."VALUEJSON".blockNo AS NUMBER), tx."BLOCKNO") AS ORDER_BLOCKNO, COALESCE(CAST(tx."VALUEJSON".txnNo AS NUMBER), tx."TXNNO") AS ORDER_TXNNO FROM "<obpInstanceName>_<channelName>_state" tx WHERE tx."CHAINCODEID" = '<chaincodeName>' AND tx."VALUEJSON".assetType = 'otransaction' AND tx.KEY NOT LIKE '_obp2pc_' AND tx."VALUEJSON".transaction_type NOT IN ('EXECUTE_HOLD_SENDER', 'CREATE_ACCOUNT') AND tx."VALUEJSON".to_account_id IS NOT NULLデータ・ソース: JSON形式のチェーンコード・データを保持するプライマリ状態表
<obpInstanceName>_<channelName>_state主なロジック:- 次の文が真である行のみを含めます。
CHAINCODEID = <chaincodeName>assetType = 'otransaction'KEYが_obp2pc_で始まらないtransaction_typeは、EXECUTE_HOLD_RECEIVER、EXECUTE_HOLD_SENDERまたはCREATE_ACCOUNTではありません
- 送信トランザクション(
from_account_id)と受信トランザクション(to_account_id)の両方からアカウントの関与を抽出します。 COALESCEを使用して、JSON値が欠落している場合でも、列の一貫した順序(ORDER_BLOCKNO、ORDER_TXNNO)を確保します。- 送信トランザクションと受信トランザクションの両方を
UNION ALLと結合します。
出力列:KEY: トランザクション(送信者または受信者)に関連付けられたアカウントID。TRANSACTION_ID: トランザクションの一意の識別子。TRANSACTION_DETAILS: トランザクションの完全なJSONオブジェクト。ORDER_BLOCKNO: 順序付けに使用されるブロック番号(使用可能な場合はJSONから、それ以外の場合はメタデータをブロックします)。ORDER_TXNNO: ブロック内のトランザクション番号(使用可能な場合はJSONから、そうでない場合はメタデータをブロックします)。
- 次の文が真である行のみを含めます。
- データSourcesConfidential SQL問合せ、参加者バンク:
CREATE VIEW ACCOUNT_TRANSACTION_VIEW AS SELECT tx."VALUEJSON".from_account_id AS "KEY", tx."VALUEJSON".transaction_id AS "TRANSACTION_ID", tx."VALUEJSON" AS "TRANSACTION_DETAILS", COALESCE(CAST(tx."VALUEJSON".blockNo AS NUMBER), tx."BLOCKNO") AS ORDER_BLOCKNO, COALESCE(CAST(tx."VALUEJSON".txnNo AS NUMBER), tx."TXNNO") AS ORDER_TXNNO FROM "<obpInstanceName>_<channelName>_state" tx WHERE tx."CHAINCODEID" = '<chaincodeName>' AND tx."VALUEJSON".assetType = 'otransaction' AND tx.KEY NOT LIKE '_obp2pc_' AND tx."VALUEJSON".transaction_type NOT IN ('EXECUTE_HOLD_RECEIVER', 'CREATE_ACCOUNT') AND tx."VALUEJSON".from_account_id IS NOT NULL UNION ALL SELECT tx."VALUEJSON".to_account_id AS "KEY", tx."VALUEJSON".transaction_id AS "TRANSACTION_ID", tx."VALUEJSON" AS "TRANSACTION_DETAILS", COALESCE(CAST(tx."VALUEJSON".blockNo AS NUMBER), tx."BLOCKNO") AS ORDER_BLOCKNO, COALESCE(CAST(tx."VALUEJSON".txnNo AS NUMBER), tx."TXNNO") AS ORDER_TXNNO FROM "<obpInstanceName>_<channelName>_state" tx WHERE tx."CHAINCODEID" = '<chaincodeName>' AND tx."VALUEJSON".assetType = 'otransaction' AND tx.KEY NOT LIKE '_obp2pc_' AND tx."VALUEJSON".transaction_type NOT IN ('EXECUTE_HOLD_SENDER', 'CREATE_ACCOUNT') AND tx."VALUEJSON".to_account_id IS NOT NULLデータ・ソース: JSON形式のチェーンコード・データを保持するプライマリ状態表
<obpInstanceName>_<channelName>_state主なロジック:- 次の文が真である行のみを含めます。
CHAINCODEID = <chaincodeName>assetType = 'otransaction'KEYが_obp2pc_で始まらないtransaction_typeは、EXECUTE_HOLD_RECEIVER、EXECUTE_HOLD_SENDERまたはCREATE_ACCOUNTではありません
- 送信トランザクション(
from_account_id)と受信トランザクション(to_account_id)の両方からアカウントの関与を抽出します。 COALESCEを使用して、JSON値が欠落している場合でも、列の一貫した順序(ORDER_BLOCKNO、ORDER_TXNNO)を確保します。- 送信トランザクションと受信トランザクションの両方を
UNION ALLと結合します。
出力列:KEY: トランザクション(送信者または受信者)に関連付けられたアカウントID。TRANSACTION_ID: トランザクションの一意のID。TRANSACTION_DETAILS: トランザクションの完全なJSONオブジェクト。ORDER_BLOCKNO: 順序付けに使用されるブロック番号(使用可能な場合はJSONから、それ以外の場合はメタデータをブロックします)。ORDER_TXNNO: ブロック内のトランザクション番号(使用可能な場合はJSONから、そうでない場合はメタデータをブロックします)。
- 次の文が真である行のみを含めます。
-
TRANSACTION_PDC_VIEW - このビューには、プライベート・データ収集からのトランザクション・レベルの残高および金額の詳細が表示されます。これにより、1トランザクション当たりの最新のレコードのみが取得されます。
- 機密SQL問合せ、システム所有者:
CREATE VIEW TRANSACTION_PDC_VIEW as SELECT sub."VALUEJSON".transaction_id AS transaction_id, sub."CHAINCODEID", sub."VALUEJSON".amount AS quantity, sub."VALUEJSON".from_account_balance AS from_account_balance, sub."VALUEJSON".from_account_onhold_balance AS from_account_onhold_balance, sub."VALUEJSON".to_account_balance AS to_account_balance, sub."VALUEJSON".to_account_onhold_balance AS to_account_onhold_balance FROM ( SELECT hist."VALUEJSON", hist."CHAINCODEID", ROW_NUMBER() OVER ( PARTITION BY hist."VALUEJSON".transaction_id ORDER BY hist.TXNTIMESTAMP DESC ) AS rn FROM "<obpInstanceName>_<channelName>_hist" hist WHERE hist."CHAINCODEID" = '${implicitPDCName}' AND hist."VALUEJSON".assetType = 'otransactionpdc' AND hist."KEY" NOT LIKE '_obp2pc_staged_%' ) sub where rn = 1 UNION ALL SELECT "TRANSACTION_ID","CHAINCODEID","QUANTITY","FROM_ACCOUNT_BALANCE","FROM_ACCOUNT_ONHOLD_BALANCE","TO_ACCOUNT_BALANCE","TO_ACCOUNT_ONHOLD_BALANCE" FROM "$TRANSACTION_PDC_VIEW"@${org1Name}_LINK UNION ALL SELECT "TRANSACTION_ID","CHAINCODEID","QUANTITY","FROM_ACCOUNT_BALANCE","FROM_ACCOUNT_ONHOLD_BALANCE","TO_ACCOUNT_BALANCE","TO_ACCOUNT_ONHOLD_BALANCE" FROM "$TRANSACTION_PDC_VIEW"@${org2Name}_LINK目的: データベース・リンクを介して組織全体のデータを集計します。
データ・ソース:<obpInstanceName>_<channelName>_hist: プライベート・データ収集レコードを含む履歴チェーンコード・データ表$TRANSACTION_PDC_VIEW@${org1Name}_LINK: データベース・リンクを介してアクセスされる組織1からのリモート・ビュー。$TRANSACTION_PDC_VIEW@${org2Name}_LINK: データベース・リンクを介してアクセスされる組織2からのリモート・ビュー。
主なロジック:- 次のステートメントが真であるレコードのみをフィルタします。
CHAINCODEID = ${implicitPDCName}assetType = 'otransactionpdc'KEYが_obp2pc_staged_.で始まらない
ROW_NUMBER()ウィンドウ関数を使用します。transaction_idによるパーティション。TXNTIMESTAMP DESCによる注文。- 最新のレコード
(rn = 1)のみを保持します。
- ローカル・プライベート・データ収集履歴表、組織1のプライベート・データ収集ビュー(データベース・リンク経由)、および組織2のプライベート・データ収集ビュー(データベース・リンク経由)のデータを結合します。
出力列:TRANSACTION_ID: トランザクションの一意の識別子。CHAINCODEID: PDCレコードに関連付けられたチェーンコードの識別子。QUANTITY: トランザクション金額または転送数量。FROM_ACCOUNT_BALANCE: トランザクション後の送信者アカウントの残高。FROM_ACCOUNT_ONHOLD_BALANCE: トランザクション後の送信者アカウントの保留残高。TO_ACCOUNT_BALANCE: トランザクション後の受け側勘定科目の残高。TO_ACCOUNT_ONHOLD_BALANCE: トランザクション後の受け側勘定科目の保留残高。
- 機密SQL問合せ、関係者銀行:
CREATE VIEW TRANSACTION_PDC_VIEW as SELECT sub."VALUEJSON".transaction_id AS transaction_id, sub."CHAINCODEID", sub."VALUEJSON".amount AS quantity, sub."VALUEJSON".from_account_balance AS from_account_balance, sub."VALUEJSON".from_account_onhold_balance AS from_account_onhold_balance, sub."VALUEJSON".to_account_balance AS to_account_balance, sub."VALUEJSON".to_account_onhold_balance AS to_account_onhold_balance FROM ( SELECT hist."VALUEJSON", hist."CHAINCODEID", ROW_NUMBER() OVER ( PARTITION BY hist."VALUEJSON".transaction_id ORDER BY hist.TXNTIMESTAMP DESC ) AS rn FROM "<obpInstanceName>_<channelName>_hist" hist WHERE hist."CHAINCODEID" = '<implicitPDCName>' AND hist."VALUEJSON".assetType = 'otransactionpdc' AND hist."KEY" NOT LIKE '_obp2pc_staged_%' ) sub where rn = 1データ・ソース:<obpInstanceName>_<channelName>_hist: プライベート・データ収集レコードを含む履歴チェーンコード・データ表
主なロジック:- 次のステートメントが真であるレコードのみをフィルタします。
CHAINCODEID = ${implicitPDCName}assetType = 'otransactionpdc'KEYが_obp2pc_staged_.で始まらない
ROW_NUMBER()ウィンドウ関数を使用します。transaction_idによるパーティション。TXNTIMESTAMP DESCによる注文。- 最新のレコード
(rn = 1)のみを保持します。
出力列:TRANSACTION_ID: トランザクションの一意識別子。CHAINCODEID: PDCレコードに関連付けられたチェーンコードの識別子。QUANTITY: トランザクション金額または転送数量。FROM_ACCOUNT_BALANCE: トランザクション後の送信者アカウントの残高。FROM_ACCOUNT_ONHOLD_BALANCE: トランザクション後の送信者アカウントの保留残高。TO_ACCOUNT_BALANCE: トランザクション後の受け側勘定科目の残高。TO_ACCOUNT_ONHOLD_BALANCE: トランザクション後の受け側勘定科目の保留残高。
-
ACCOUNTS_VIEW - このビューには、組織全体の勘定科目の連結ビューが表示されます。
- 機密SQL問合せ、システム所有者:
CREATE VIEW ACCOUNTS_VIEW as WITH hist_ranked AS ( SELECT hist.valuejson, hist."VALUEJSON".account_id AS account_id, ROW_NUMBER() OVER ( PARTITION BY hist."VALUEJSON".account_id ORDER BY hist.TXNTIMESTAMP DESC ) AS rn FROM "<obpInstanceName>_<channelName>_hist" hist WHERE hist."CHAINCODEID" = '<implicitPDCName>' AND hist."VALUEJSON".assetType = 'oaccountpdc' ), state_filtered AS ( SELECT state.key, state.valueJSON FROM "<obpInstanceName>_<channelName>_state" state WHERE state."CHAINCODEID" = '${chaincodeName}' AND state."VALUEJSON".assetType = 'oaccount' ), token_details AS ( SELECT state.key, state.valueJson, COALESCE ( TO_NUMBER(JSON_VALUE(valuejson, '$.divisible.decimal' RETURNING VARCHAR2)), 0) AS decimal_value FROM "<obpInstanceName>_<channelName>_state" state WHERE state."CHAINCODEID" = '<chaincodeName>' AND state."VALUEJSON".assetType = 'otoken' ) SELECT s.key as account_id, s.valueJSON.org_id AS org_id, h.valuejson.user_id AS user_id, h.valuejson.custom_account_id AS custom_account_id, s.valueJSON.token_id AS token_id, t.decimal_value FROM state_filtered s LEFT JOIN hist_ranked h ON h.account_id = s.key AND h.rn = 1 LEFT JOIN token_details t ON s.valueJSON.token_id = t.key WHERE h.valuejson is not null UNION ALL SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID", "TOKEN_ID", "DECIMAL_VALUE" FROM "ACCOUNTS_VIEW"@<org1Name>_LINK WHERE "USER_ID" IS NOT NULL UNION ALL SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID", "TOKEN_ID", "DECIMAL_VALUE" FROM "ACCOUNTS_VIEW"@$<org2Name>_LINK WHERE "USER_ID" IS NOT NULL目的: このビューには、組織全体の勘定科目の連結ビューが表示され、次の情報が結合されます。- 現在のアカウントの状態
- 最新のアカウント関連のプライベート・データ(プライベート・データ収集)
- 小数点以下のようなトークン・メタデータ
- データベース・リンクを介した組織間アカウント詳細
データ・ソース:<obpInstanceName>_<channelName>_hist: 履歴チェーンコード・データ。最新のアカウント・プライベート・データ収集エントリ(oaccountpdc)のフェッチに使用されます。<obpInstanceName>_<channelName>_state: アカウント(oaccount)およびトークンの現在の状態データ(otoken)。ACCOUNTS_VIEW@<org1Name>_LINK: 組織1からのリモート・ビュー。ACCOUNTS_VIEW@<org2Name>_LINK: 組織2からのリモート・ビュー。
主なロジック:hist_rankedCTE:ORDER BY TXNTIMESTAMP DESCを指定したROW_NUMBER()を使用して、account_id当たりの最新のプライベート・データ収集レコードを取得します。state_filteredCTE: 状態表からアカウント(oaccount)を選択します。token_detailsCTE: トークン詳細(otoken)を10進精度で取得します(欠落している場合、デフォルトは0)。- 最終選択結合: アカウント状態(
state_filtered)と最新のプライベート・データ収集詳細(hist_ranked)およびトークン・メタデータ(token_details)。 - 関連付けられたプライベート・データ収集(
WHERE h.valuejson IS NOT NULL)を持つアカウントのみを保証します。 - 他の組織のデータベース・リンク・ユニオンを使用してアカウント・データを拡張します。
出力列:ACCOUNT_ID: アカウントの一意の識別子。ORG_ID: アカウントに関連付けられた組織ID。USER_ID: (プライベート・データ収集から)アカウントにリンクされたユーザーID。CUSTOM_ACCOUNT_ID: カスタム・ユーザー定義アカウント識別子。TOKEN_ID: アカウントに関連付けられたトークン識別子。DECIMAL_VALUE: トークンの10進精度(欠落している場合は0にデフォルト設定されます)。
- 機密SQL問合せ、関係者銀行:
CREATE VIEW ACCOUNTS_VIEW AS WITH hist_ranked AS ( SELECT hist.valuejson, hist."VALUEJSON".account_id AS account_id, ROW_NUMBER() OVER ( PARTITION BY hist."VALUEJSON".account_id ORDER BY hist.TXNTIMESTAMP DESC ) AS rn FROM "<obpInstanceName>_<channelName>_hist" hist WHERE hist."CHAINCODEID" = '<implicitPDCName>' AND hist."VALUEJSON".assetType = 'oaccountpdc' ), state_filtered AS ( SELECT state.key, state.valueJSON FROM "<obpInstanceName>_<channelName>_state" state WHERE state."CHAINCODEID" = '<chaincodeName>' AND state."VALUEJSON".assetType = 'oaccount' ), token_details AS ( SELECT state.key, COALESCE (TO_NUMBER(JSON_VALUE(valuejson, '$.divisible.decimal' RETURNING VARCHAR2)), 0) AS decimal_value FROM "<obpInstanceName>_<channelName>_state" state WHERE state."CHAINCODEID" = '<chaincodeName>' AND state."VALUEJSON".assetType = 'otoken' ) SELECT s.key AS account_id, s.valueJSON.org_id AS org_id, h.valuejson.user_id AS user_id, h.valuejson.custom_account_id AS custom_account_id, s.valueJSON.token_id AS token_id, t.decimal_value FROM state_filtered s LEFT JOIN hist_ranked h ON h.account_id = s.key AND h.rn = 1 LEFT JOIN token_details t ON s.valueJSON.token_id = t.key目的: このビューには、組織全体の勘定科目の連結ビューが表示され、次の情報が結合されます。- 現在のアカウントの状態
- 最新のアカウント関連のプライベート・データ(プライベート・データ収集)
- 小数点以下のようなトークン・メタデータ
データ・ソース:<obpInstanceName>_<channelName>_hist: 履歴チェーンコード・データ。最新のアカウント・プライベート・データ収集エントリ(oaccountpdc)のフェッチに使用されます。<obpInstanceName>_<channelName>_state: アカウント(oaccount)およびトークンの現在の状態データ(otoken)。
主なロジック:hist_rankedCTE:ORDER BY TXNTIMESTAMP DESCを指定したROW_NUMBER()を使用して、account_id当たりの最新のプライベート・データ収集レコードを取得します。state_filteredCTE: 状態表からアカウント(oaccount)を選択します。token_detailsCTE: トークン詳細(otoken)を10進精度で取得します(欠落している場合、デフォルトは0)。- 最終選択結合: アカウント状態(
state_filtered)と最新のプライベート・データ収集詳細(hist_ranked)およびトークン・メタデータ(token_details)。 - 関連付けられたプライベート・データ収集(
WHERE h.valuejson IS NOT NULL)を持つアカウントのみを保証します。
出力列:ACCOUNT_ID: 勘定科目の一意の識別子。ORG_ID: アカウントに関連付けられた組織ID。USER_ID: (プライベート・データ収集から)アカウントにリンクされたユーザーID。CUSTOM_ACCOUNT_ID: カスタム・ユーザー定義アカウント識別子。TOKEN_ID: アカウントに関連付けられたトークン識別子。DECIMAL_VALUE: トークンの10進精度(欠落している場合は0にデフォルト設定されます)。
-
ACCOUNTS_MOD - このビューは、代替可能トークン・レジストリ・データの構造化表現を提供し、組織およびユーザーを関連する代替可能トークン・アカウントおよびトークンにマップします。ネストされたJSON配列をフラット化することで、チェーンコード状態に格納されたアカウントとトークンの関係へのアクセスを簡素化し、アプリケーションおよび分析問合せの消費を容易にします。
- 汎用SQL問合せ、TypeScript:
`create view ACCOUNTS_MOD as SELECT s.blockno, s.txnno, s.key, s.valuejson.assetType, s.valueJson.org_id, s.valueJson.user_id, ft.account_id, ft.token_id FROM "<obpInstanceName>_<channelName>_state" s, json_table(s.valuejson, '$.associated_ft_accounts[*]' Columns(lng_number FOR ORDINALITY, account_id varchar2 (1000) Path '$.account_id' null on empty, token_id varchar2 (16) Path '$.token_id' null on empty)) ft where s.key like '%oftregistry%' AND s.chaincodeid = '<chaincodeName>' order by s.blockno DESC, s.txnno DESC`データ・ソース:<obpInstanceName>_<channelName>_state: チェーンコード・データをJSON形式で保持するプライマリ状態表。
主なロジック:- レジストリ・キーによるフィルタ: キーに
oftregistryが含まれるレコードのみが含まれます。 - チェーンコードによるフィルタ: 結果を指定されたチェーンコード(
<chaincodeName>)に制限します。 - ネストされたJSONのフラット化:
JSON_TABLEを使用して、勘定科目とトークンのペアごとにassociated_ft_accounts配列を別々の行に展開します。account_id: Fungibleトークン・アカウント識別子。token_id: アカウントにリンクされたトークン。lng_number: 序数(配列の順序を追跡するために内部的に使用されます)。
- 順序付け: 結果は、ブロック番号(
blockno)およびトランザクション番号(txnno)で降順にソートされ、最新の関連付けが最初に表示されます。
出力列:BLOCKNO: レジストリの更新が記録されたブロック番号。TXNNO: ブロック内のトランザクション番号。KEY: ファンクション・トークン・レジストリ・エントリを表す状態キー。ASSETTYPE: アセットのタイプ(予想:oftregistry)。ORG_ID: JSONからの組織識別子。USER_ID: レジストリ・レコードに関連付けられたユーザー識別子。ACCOUNT_ID: ネストされた配列から抽出された代替トークン・アカウントID。TOKEN_ID: 機能可能トークン・アカウントにリンクされた抽出済トークンID。
- 汎用SQL問合せ、実行:
`create view ACCOUNTS_MOD as SELECT s.blockno, s.txnno, s.key, s.valuejson.AssetType, s.valueJson.OrgId as org_id, s.valueJson.UserId as user_id, ft.account_id, ft.token_id FROM "<obpInstanceName>_<channelName>_state" s, json_table(s.valuejson, '$.AssociatedFtAccounts[*]' Columns(lng_number FOR ORDINALITY, account_id varchar2 (1000) Path '$.AccountId' null on empty, token_id varchar2 (16) Path '$.TokenId' null on empty)) ft where s.key like '%oftregistry%' AND s.chaincodeid = '<chaincodeName>' order by s.blockno DESC, s.txnno DESC`このビューは、汎用SQL問合せのTypeScriptビューと同じです。唯一の違いは、小文字ではなくPascal大/小文字を使用するJSONフィールド命名規則にあります。AssetType: 以前はassetTypeOrgId: 以前はorg_idUserId: 以前はuser_idAssociatedFtAccounts: 以前はassociated_ft_accountsAccountId: 以前はaccount_idTokenId: 以前はtoken_id
OrgId AS org_idなど)が適用されます。 - 機密SQL問合せ、システム所有者:
CREATE VIEW ACCOUNTS_MOD AS SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID","TOKEN_ID","DECIMAL_VALUE" FROM ( WITH hist_ranked AS ( SELECT hist.valuejson, hist."VALUEJSON".account_id AS account_id, ROW_NUMBER() OVER ( PARTITION BY hist."VALUEJSON".account_id ORDER BY hist.TXNTIMESTAMP DESC ) AS rn FROM "<obpInstanceName>_<channelName>_hist" hist WHERE hist."CHAINCODEID" = '<implicitPDCName>' AND hist."VALUEJSON".assetType = 'oaccountpdc' ), state_filtered AS ( SELECT state.key, state.valueJSON FROM "<obpInstanceName>_<channelName>_state" state WHERE state."CHAINCODEID" = '<chaincodeName>' AND state."VALUEJSON".assetType = 'oaccount' ), token_details AS ( SELECT state.key, state.valueJson, COALESCE( TO_NUMBER(JSON_VALUE(valuejson, '$.divisible.decimal' RETURNING VARCHAR2)), 0 ) AS decimal_value FROM "<obpInstanceName>_<channelName>_state" state WHERE state."CHAINCODEID" = '<chaincodeName>' AND state."VALUEJSON".assetType = 'otoken' ) SELECT s.key AS account_id, s.valueJSON.org_id AS org_id, h.valuejson.user_id AS user_id, h.valuejson.custom_account_id AS custom_account_id, s.valueJSON.token_id AS token_id, t.decimal_value FROM state_filtered s LEFT JOIN hist_ranked h ON h.account_id = s.key AND h.rn = 1 LEFT JOIN token_details t ON s.valueJSON.token_id = t.key WHERE h.valuejson IS NOT NULL ) UNION ALL SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID","TOKEN_ID","DECIMAL_VALUE" FROM "ACCOUNTS_MOD"@<org1Name>_LINK UNION ALL SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID","TOKEN_ID","DECIMAL_VALUE" FROM "ACCOUNTS_MOD"@<org2Name>_LINK UNION ALL SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID","TOKEN_ID","DECIMAL_VALUE" FROM "ACCOUNTS_MOD"@<org3Name>_LINK;データ・ソース:<obpInstanceName>_<channelName>_hist: アカウント・プライベート・データの時系列の変更を格納する履歴表(oaccountpdc)。<obpInstanceName>_<channelName>_state:oaccountおよびotokenの詳細に使用される、現在のチェーンコード状態をJSON形式で保持する状態表。- リモート組織ビュー: 他の組織のACCOUNTS_MODビューからの追加データは、データベース・リンクを使用して含まれます。
"ACCOUNTS_MOD"@<org1Name>_LINK"ACCOUNTS_MOD"@<org2Name>_LINK"ACCOUNTS_MOD"@<org3Name>_LINK
主なロジック:- 履歴レコードのランク付け:
ROW_NUMBER()を使用して、履歴表からアカウントIDごとに最新のoaccountpdcレコードを選択します。 - 現在のアカウントのフィルタ: 状態表から
assetType = 'oaccount'のレコードのみを取得します。 - 結合トークン・メタデータ: 状態表の
otokenエントリに対して結合することで、トークン精度(decimal_value)を追加します。 - 勘定科目詳細の組合せ: フィルタ済勘定科目レコードを最新の履歴エントリおよびトークン詳細と結合します。有効な履歴データ(
h.valuejson IS NOT NULL)を持つアカウントのみが含まれることを確認します。 - 複数組織結合:
UNION ALLを使用して、ローカル組織からのアカウント・データをデータベース・リンクを介して複数のリモート組織とマージします。これにより、単一の統合問合せで、ネットワーク全体のすべてのアカウントを取得できます。
出力列:ACCOUNT_ID: アカウントの一意の識別子。ORG_ID: アカウントを所有する組織ID。USER_ID: (最新の履歴レコードから)アカウントにリンクされたユーザーID。CUSTOM_ACCOUNT_ID: オプションのカスタム・ユーザー定義アカウント識別子。TOKEN_ID: アカウントに関連付けられたトークン識別子。DECIMAL_VALUE: トークンの10進精度(欠落している場合は0にデフォルト設定されます)。
動的生成: 複数組織部品はハードコードされていません。スクリプトでは、余分な共用体は
Participant_orgs_list.ymlファイルに基づいて動的に生成されます。これにより、ネットワーク内に構成されている組織の数に応じて、ビューが自動的に適応するようになります。問合せの例では、わかりやすくするために3つの組織を示していますが、実際にはorgsListのサイズによってユニオンの数が異なります。詳細は、このトピックのParticipant_orgs_list.ymlファイルに関する前の情報を参照してください。 - 機密SQL問合せ、関係者銀行:
CREATE VIEW ACCOUNTS_MOD AS WITH hist_ranked AS ( SELECT hist.valuejson, hist."VALUEJSON".account_id AS account_id, ROW_NUMBER() OVER ( PARTITION BY hist."VALUEJSON".account_id ORDER BY hist.TXNTIMESTAMP DESC ) AS rn FROM "<obpInstanceName>_<channelName>_hist" hist WHERE hist."CHAINCODEID" = '<implicitPDCName>' AND hist."VALUEJSON".assetType = 'oaccountpdc' ), state_filtered AS ( SELECT state.key, state.valueJSON FROM "$<obpInstanceName>_<channelName>_state" state WHERE state."CHAINCODEID" = '<chaincodeName>' AND state."VALUEJSON".assetType = 'oaccount' ), token_details AS ( SELECT state.key, COALESCE( TO_NUMBER(JSON_VALUE(valuejson, '$.divisible.decimal' RETURNING VARCHAR2)), 0 ) AS decimal_value FROM "${stateTableName}" state WHERE state."CHAINCODEID" = '${chaincodeName}' AND state."VALUEJSON".assetType = 'otoken' ) SELECT s.key AS account_id, s.valueJSON.org_id AS org_id, h.valuejson.user_id AS user_id, h.valuejson.custom_account_id AS custom_account_id, s.valueJSON.token_id AS token_id, t.decimal_value FROM state_filtered s LEFT JOIN hist_ranked h ON h.account_id = s.key AND h.rn = 1 LEFT JOIN token_details t ON s.valueJSON.token_id = t.key WHERE h.valuejson IS NOT NULL;このビューは、機密SQLクエリー(システム オーナー)と同じですが、ローカル組織のデータのみが取得されます。主な違いは次のとおりです。- データベース・リンクを含む
UNION ALLは使用されません。 - 出力には、現在の組織の状態表および履歴表の勘定科目のみが含まれます。
- このビューは、複数の組織にまたがる勘定科目を連結する複数組織バリアントとは異なり、単一組織アカウント・レジストリを提供します。
- データベース・リンクを含む
-
TRANSACTION_MOD - このビューは、すべてのブロックチェーン・トランザクションの詳細なレコードを提供し、メタデータ、参加者、金額および結果の残高を取得します。履歴表から構造化フィールドを直接抽出することで、トランザクション履歴へのアクセスを簡素化し、RAW JSONを手動で解析する必要がなくなります。
- 汎用SQL問合せ、TypeScript:
`create view TRANSACTION_MOD as SELECT h.blockno, h.txnno, h.key, h.txntimestamp, h.valuejson.assetType, h.valuejson.transaction_id, h.valuejson.from_account_id, h.valuejson.to_account_id, h.valuejson.transaction_type, h.valuejson.amount, h.valuejson.category as transaction_earmark, h.valuejson.from_account_balance, h.valuejson.to_account_balance FROM "<obpInstanceName>_<channelName>_hist" h where h.key like '%otransaction%' AND h.chaincodeid = '<chaincodeName>' order by h.blockno DESC, h.txnno DESC`データ・ソース:
<obpInstanceName>_<channelName>_hist。すべてのトランザクション・イベントをJSON形式で保持する履歴表です。トランザクション詳細および関連するメタデータ(ブロック、トランザクション番号、タイムスタンプ)の両方が含まれます。主なロジック:- 次の文が真である行のみを含めます。
CHAINCODEID = <chaincodeName>KEYには、otransactionが含まれます(トランザクション関連レコードのフィルタ)
- オーダーは次の方法で行われます。
blockno DESC(最新のブロックが先)txnno DESC(ブロック内の最新のトランザクションから順)
出力列:BLOCKNO: トランザクションが記録されたブロック番号。TXNNO: ブロック内のトランザクション番号。KEY: トランザクション・エントリの一意の識別子。TXNTIMESTAMP: トランザクションが完了した時点のタイムスタンプ。ASSETTYPE: トランザクションのアセットのタイプ(たとえば、otransaction)。TRANSACTION_ID: トランザクションの一意の識別子。FROM_ACCOUNT_ID: 資産/価値の発生元の勘定科目ID。TO_ACCOUNT_ID: 資産/価値が転送された勘定科目ID。TRANSACTION_TYPE: トランザクションのタイプ(振替、借方、貸方など)。AMOUNT: トランザクションに関連する金額。TRANSACTION_EARMARK: トランザクションのカテゴリまたはearmark。FROM_ACCOUNT_BALANCE: トランザクション後のソース勘定科目の残高。TO_ACCOUNT_BALANCE: トランザクション後の宛先勘定科目の残高。
- 次の文が真である行のみを含めます。
- 汎用SQL問合せ、実行:
`create view TRANSACTION_MOD as SELECT h.blockno, h.txnno, h.key, h.txntimestamp, h.valuejson.AssetType, h.valuejson.TransactionId as transaction_id, h.valuejson.FromAccountId as from_account_id, h.valuejson.ToAccountId as to_account_id, h.valuejson.TransactionType as transaction_type, h.valuejson.Amount, h.valuejson.Category as transaction_earmark, h.valuejson.FromAccountBalance as from_account_balance, h.valuejson.ToAccountBalance as to_account_balance FROM "<obpInstanceName>_<channelName>_hist" h where h.key like '%otransaction%' AND h.chaincodeid = '<chaincodeName>' order by h.blockno DESC, h.txnno DESC`このビューは、汎用SQL問合せのTypeScriptビューと同じです。唯一の違いは、小文字ではなくPascal大/小文字を使用するJSONフィールド命名規則にあります。AssetType: 以前はassetTypeTransactionId: 以前はtransaction_idFromAccountId: 以前はfrom_account_idToAccountId: 以前はto_account_idTransactionType: 以前はtransaction_typeAmount: 以前はamountCategory: 以前はcategoryFromAccountBalance: 以前はfrom_account_balanceToAccountBalance: 以前はto_account_balance
TransactionId AS transaction_idなど)は、JSONフィールドの命名規則に関係なく、ビュー間で出力列名の一貫性を保つために適用されます。 - 機密SQL問合せ、システム所有者:
`CREATE VIEW TRANSACTION_MOD AS SELECT COALESCE(CAST(sub."VALUEJSON".blockNo AS NUMBER), sub."BLOCKNO") AS BLOCKNO, COALESCE(CAST(sub."VALUEJSON".txnNo AS NUMBER), sub."TXNNO") AS TXNNO, sub.key, sub.txntimestamp, sub.valuejson.assetType, sub.valuejson.transaction_id, sub.valuejson.from_account_id, sub.valuejson.to_account_id, sub.valuejson.transaction_type, (TO_NUMBER(sub.quantity) / POWER(10, sub.decimal_value)) as amount, sub.valuejson.category as transaction_earmark, (TO_NUMBER(sub.from_account_balance) / POWER(10, sub.decimal_value)) as from_account_balance, (TO_NUMBER(sub.to_account_balance) / POWER(10, sub.decimal_value)) as to_account_balance from ( SELECT hist.*, pdc.*, CASE WHEN hist."VALUEJSON".from_account_id IS NOT NULL THEN (SELECT DECIMAL_VALUE FROM "ACCOUNTS_MOD" WHERE ACCOUNT_ID = hist."VALUEJSON".from_account_id FETCH FIRST 1 ROW ONLY) WHEN hist."VALUEJSON".to_account_id IS NOT NULL THEN (SELECT DECIMAL_VALUE FROM "ACCOUNTS_MOD" WHERE ACCOUNT_ID = hist."VALUEJSON".to_account_id FETCH FIRST 1 ROW ONLY) ELSE 0 END AS decimal_value, ROW_NUMBER() OVER ( PARTITION BY hist."VALUEJSON".transaction_id ORDER BY hist.TXNTIMESTAMP DESC ) AS rn FROM "<obpInstanceName>_<channelName>_hist" hist LEFT JOIN "<transactionPDCViewName>" pdc ON hist.key = pdc.TRANSACTION_ID WHERE hist."CHAINCODEID" = '<chaincodeName>' AND hist."VALUEJSON".assetType = 'otransaction' AND hist."KEY" NOT LIKE '_obp2pc_staged_%' ) sub where rn = 1`データ・ソース:<obpInstanceName>_<channelName>_hist: すべてのトランザクション・バージョンを格納する履歴チェーンコード表。<transactionPDCViewName>: トランザクション・レコードをエンリッチするために結合されたプライベート・データ収集トランザクションの詳細を含むビュー。ACCOUNTS_MOD: 勘定科目残高およびトランザクション金額の正しいdecimal_valueをフェッチするために使用する参照ビュー。
主なロジック:- 次の文が真である行のみをフィルタします。
CHAINCODEID = <chaincodeName>assetType = 'otransaction'KEYが_obp2pc_staged_で始まらない
transaction_idでパーティション化されたROW_NUMBER()(txntimestamp DESC順)を使用して、トランザクション当たりの最新のレコードのみが含まれるようにします。- トランザクションに
from_account_idまたはto_account_idのどちらが含まれるかに基づいて、ACCOUNTS_MODからdecimal_valueを動的にフェッチします。 - 金額および残高(
amount、from_account_balance、to_account_balance)は、value / POWER(10, decimal_value)を使用して小数精度でスケーリングされます。 blockNoおよびtxnNoでCOALESCEを使用して、JSONにない場合でも、順序付け列が常に存在することを確認します。
出力列:BLOCKNO: 順序付けのブロック番号(使用可能な場合はJSONから、それ以外の場合はメタデータから)。TXNNO: ブロック内のトランザクション番号(使用可能な場合はJSON、それ以外の場合はメタデータ)。KEY: トランザクション・キー識別子。TXNTIMESTAMP: トランザクションのタイムスタンプ。ASSETTYPE: アセット・タイプ(otransaction)。TRANSACTION_ID: トランザクションの一意の識別子。FROM_ACCOUNT_ID: トークンの送信元のアカウントID。TO_ACCOUNT_ID: トークンの送信先のアカウントID。TRANSACTION_TYPE: トランザクションのタイプ(転送、保留、リリースなど)。AMOUNT: トランザクション金額。トークンの小数精度でスケーリングされます。TRANSACTION_EARMARK: トランザクションのカテゴリまたはアーマーク。FROM_ACCOUNT_BALANCE: 精度でスケーリングされた、トランザクション後の送信者のアカウントの残高。TO_ACCOUNT_BALANCE: トランザクション後の受け側の勘定科目の残高(精度でスケール)。
- 機密SQL問合せ、関係者銀行:
`CREATE VIEW TRANSACTION_MOD AS SELECT COALESCE(CAST(sub."VALUEJSON".blockNo AS NUMBER), sub."BLOCKNO") AS BLOCKNO, COALESCE(CAST(sub."VALUEJSON".txnNo AS NUMBER), sub."TXNNO") AS TXNNO, sub.key, sub.txntimestamp, sub.valuejson.assetType, sub.valuejson.transaction_id, sub.valuejson.from_account_id, sub.valuejson.to_account_id, sub.valuejson.transaction_type, (TO_NUMBER(sub.quantity) / POWER(10, sub.decimal_value)) as amount, sub.valuejson.category as transaction_earmark, (TO_NUMBER(sub.from_account_balance) / POWER(10, sub.decimal_value)) as from_account_balance, (TO_NUMBER(sub.to_account_balance) / POWER(10, sub.decimal_value)) as to_account_balance from ( SELECT hist.*, pdc.*, CASE WHEN hist."VALUEJSON".from_account_id IS NOT NULL THEN (SELECT DECIMAL_VALUE FROM "ACCOUNTS_MOD" WHERE ACCOUNT_ID = hist."VALUEJSON".from_account_id FETCH FIRST 1 ROW ONLY) WHEN hist."VALUEJSON".to_account_id IS NOT NULL THEN (SELECT DECIMAL_VALUE FROM "ACCOUNTS_MOD" WHERE ACCOUNT_ID = hist."VALUEJSON".to_account_id FETCH FIRST 1 ROW ONLY) ELSE 0 END AS decimal_value, ROW_NUMBER() OVER ( PARTITION BY hist."VALUEJSON".transaction_id ORDER BY hist.TXNTIMESTAMP DESC ) AS rn FROM "<obpInstanceName>_<channelName>_hist" hist LEFT JOIN "<transactionPDCViewName>" pdc ON hist.key = pdc.TRANSACTION_ID WHERE hist."CHAINCODEID" = '<chaincodeName>' AND hist."VALUEJSON".assetType = 'otransaction' AND hist."KEY" NOT LIKE '_obp2pc_staged_%' ) sub where rn = 1`データ・ソース:<obpInstanceName>_<channelName>_hist: JSON形式のすべてのトランザクション・バージョンを含む履歴チェーンコード表。<transactionPDCViewName>: トランザクション・レベルのプライベート・データを保持するプライベート・データ収集ビュー。トランザクション・レコードをエンリッチするために履歴と結合されます。ACCOUNTS_MOD: トランザクションに関連するアカウントの正しいトークン小数精度(decimal_value)を取得するために使用されるビュー。
主なロジック:- 次の文が真である行のみをフィルタします。
CHAINCODEID = <chaincodeName>assetType = 'otransaction'- ステージングされたトランザクションの除外(
KEY NOT LIKE '_obp2pc_staged_%')
- 小数スケーリング:
from_account_idまたはto_account_idに基づいて、decimal_valueをACCOUNTS_MODから動的にフェッチします。value / POWER(10, decimal_value)を使用して、amount、from_account_balanceおよびto_account_balanceにスケーリングを適用します。 - レコード選択:
transaction_idによってパーティション化されたROW_NUMBER()(最新のTXNTIMESTAMP)を使用して、各トランザクションの最新バージョンのみが返されるようにします。 - データの正規化:
COALESCEがblockNoおよびtxnNoに適用され、JSONペイロードに値が欠落している場合でも一貫性が確保されます。
出力列:BLOCKNO: 順序付けに使用されるブロック番号(使用可能な場合はJSONから、それ以外の場合はメタデータから)。TXNNO: ブロック内のトランザクション番号(使用可能な場合はJSON、それ以外の場合はメタデータ)。KEY: トランザクション・キー識別子。TXNTIMESTAMP: トランザクションのタイムスタンプ。ASSETTYPE: アセット・タイプ(otransaction)。TRANSACTION_ID: トランザクションの一意識別子。FROM_ACCOUNT_ID: トークンを送信するアカウントID。TO_ACCOUNT_ID: トークンを受信するアカウントID。TRANSACTION_TYPE: トランザクションのタイプ(転送、保留、リリースなど)。AMOUNT: トークンの小数精度を使用して正規化されたトランザクション金額。TRANSACTION_EARMARK: トランザクションのカテゴリまたはearmark。FROM_ACCOUNT_BALANCE: トランザクション後の送信者アカウントの残高(精度調整済)。TO_ACCOUNT_BALANCE: トランザクション後の受け側勘定科目の残高(精度調整済)。
-
ACCOUNTS_TRANSACTION_MOD - このビューは、各トランザクションを関連勘定科目の組織IDに関連付けることで、トランザクション履歴を拡張します。書き込み承認、ミント承認、および通常の転送をサポートし、トランザクションにアカウント・レベルと組織レベルのコンテキストの両方が含まれるようにします。
- 汎用SQL問合せ、TypeScriptおよびGo:
`create view ACCOUNTS_TRANSACTION_MOD as SELECT DISTINCT TRANSACTION_ID, A.BLOCKNO, FROM_ACCOUNT_ID, TO_ACCOUNT_ID, A.TRANSACTION_EARMARK EARMARK, B.ORG_ID FROM_ORG_ID, B.ORG_ID TO_ORG_ID, TRANSACTION_TYPE, AMOUNT, A.TXNTIMESTAMP CRDATE FROM <transactionViewName> A, <accountsViewName> B WHERE A.FROM_ACCOUNT_ID=B.ACCOUNT_ID AND A.TRANSACTION_TYPE='APPROVE_BURN' UNION SELECT DISTINCT TRANSACTION_ID, A.BLOCKNO, FROM_ACCOUNT_ID, TO_ACCOUNT_ID, A.TRANSACTION_EARMARK EARMARK, C.ORG_ID FROM_ORG_ID, C.ORG_ID TO_ORG_ID, TRANSACTION_TYPE, AMOUNT, A.TXNTIMESTAMP CRDATE FROM <transactionViewName> A, <accountsViewName> C WHERE A.TO_ACCOUNT_ID=C.ACCOUNT_ID AND A.TRANSACTION_TYPE='APPROVE_MINT' UNION SELECT DISTINCT TRANSACTION_ID, A.BLOCKNO, FROM_ACCOUNT_ID, TO_ACCOUNT_ID, A.TRANSACTION_EARMARK EARMARK, B.ORG_ID FROM_ORG_ID, C.ORG_ID TO_ORG_ID, TRANSACTION_TYPE, AMOUNT, A.TXNTIMESTAMP CRDATE FROM <transactionViewName> A, <accountsViewName> B, <accountsViewName> C WHERE A.FROM_ACCOUNT_ID=B.ACCOUNT_ID AND A.TO_ACCOUNT_ID=C.ACCOUNT_ID ORDER BY BLOCKNO DESC`データ・ソース:<transactionViewName> (A): ID、ブロック番号、勘定科目、金額、タイムスタンプなどのコア・トランザクションの詳細を提供します。<accountsViewName> (B, C): 送信者と受信者の両方のアカウント(ACCOUNT_ID)を組織(ORG_ID)にマップします。
キー・ロジック: ビューは、次の3つのケースのUNIONを使用して構築されます。APPROVE_BURNFROM_ACCOUNT_ID = B.ACCOUNT_IDに参加します。B.ORG_IDをFROM_ORG_IDとTO_ORG_IDの両方に割り当てます。
APPROVE_MINTTO_ACCOUNT_ID = C.ACCOUNT_IDに参加します。C.ORG_IDをFROM_ORG_IDとTO_ORG_IDの両方に割り当てます。
- 通常転送
FROM_ACCOUNT_ID = B.ACCOUNT_IDおよびTO_ACCOUNT_ID = C.ACCOUNT_IDで結合します。B.ORG_IDをFROM_ORG_ID、C.ORG_IDをTO_ORG_IDとして割り当てます。
BLOCKNO DESCで順序付けされます。出力列:TRANSACTION_ID: トランザクションの一意識別子。BLOCKNO: トランザクションが記録されたブロック番号。FROM_ACCOUNT_ID: 送信者のアカウントID。TO_ACCOUNT_ID: 受信者のアカウントID。EARMARK: トランザクション・アーマーク・カテゴリ(TRANSACTION_EARMARKの別名)。FROM_ORG_ID: 送信者のアカウントの組織ID(またはバーンについてはTOと同じ)。TO_ORG_ID: 受信者のアカウントの組織ID (またはミントのFROMと同じ)。TRANSACTION_TYPE: トランザクションのタイプ(APPROVE_BURN、APPROVE_MINTまたは転送)。AMOUNT: トランザクション金額。CRDATE: トランザクション作成日(TXNTIMESTAMPから)。
- 機密SQL問合せ、システム所有者および参加者銀行:
`CREATE VIEW ACCOUNTS_TRANSACTION_MOD AS SELECT DISTINCT TRANSACTION_ID, A.BLOCKNO, FROM_ACCOUNT_ID, TO_ACCOUNT_ID, A.TRANSACTION_EARMARK EARMARK, B.ORG_ID FROM_ORG_ID, B.ORG_ID TO_ORG_ID, TRANSACTION_TYPE, AMOUNT, A.TXNTIMESTAMP CRDATE FROM "<transactionViewName>" A, "<accountsViewName>" B WHERE A.FROM_ACCOUNT_ID=B.ACCOUNT_ID AND A.TO_ACCOUNT_ID IS NULL AND A.TRANSACTION_TYPE != 'CREATE_ACCOUNT' UNION SELECT DISTINCT TRANSACTION_ID, A.BLOCKNO, FROM_ACCOUNT_ID, TO_ACCOUNT_ID, A.TRANSACTION_EARMARK EARMARK, C.ORG_ID FROM_ORG_ID, C.ORG_ID TO_ORG_ID, TRANSACTION_TYPE, AMOUNT, A.TXNTIMESTAMP CRDATE FROM "<transactionViewName>" A, "<accountsViewName>" C WHERE A.TO_ACCOUNT_ID=C.ACCOUNT_ID AND A.FROM_ACCOUNT_ID IS NULL UNION SELECT DISTINCT TRANSACTION_ID, A.BLOCKNO, FROM_ACCOUNT_ID, TO_ACCOUNT_ID, A.TRANSACTION_EARMARK EARMARK, B.ORG_ID FROM_ORG_ID, C.ORG_ID TO_ORG_ID, TRANSACTION_TYPE, AMOUNT, A.TXNTIMESTAMP CRDATE FROM "<transactionViewName>" A, "<accountsViewName>" B, "<accountsViewName>" C WHERE A.FROM_ACCOUNT_ID=B.ACCOUNT_ID AND A.TO_ACCOUNT_ID=C.ACCOUNT_ID ORDER BY BLOCKNO DESCデータ・ソース:<transactionViewName> (A): トランザクション・レベルのデータ(ID、ブロック番号、勘定科目参照、金額、タイムスタンプ)を提供します。<accountsViewName> (B, C):ACCOUNT_IDとORG_IDの間のマッピングを提供します。
キー・ロジック: このビューでは、UNIONを使用して、次の3つのトランザクション・パターンの結果をマージします。- 送信者専用トランザクション(発信や書き込みのようなケースなど)
- 条件:
A.FROM_ACCOUNT_ID = B.ACCOUNT_IDおよびA.TO_ACCOUNT_ID IS NULL。 CREATE_ACCOUNTトランザクション・タイプを除外します。FROM_ORG_IDとTO_ORG_IDの両方が、送信者の組織(B.ORG_ID)から導出されます。
- 条件:
- 受信者のみのトランザクション(たとえば、受信またはミントのようなケース)
- 条件:
A.TO_ACCOUNT_ID = C.ACCOUNT_IDおよびA.FROM_ACCOUNT_ID IS NULL。 FROM_ORG_IDとTO_ORG_IDはどちらも、受信者の組織(C.ORG_ID)から導出されます。
- 条件:
- 標準転送(送信者と受信者の両方とのトランザクション)
- 条件:
A.FROM_ACCOUNT_ID = B.ACCOUNT_IDおよびA.TO_ACCOUNT_ID = C.ACCOUNT_ID。 FROM_ORG_IDは、受信者の組織(C.ORG_ID)のTO_ORG_IDである送信者の組織(B.ORG_ID)から取得されます。
- 条件:
BLOCKNOの降順でソートされ、最新のトランザクションに優先順位が付けられます。出力列:TRANSACTION_ID: トランザクションの一意識別子。BLOCKNO: トランザクションが記録されるブロック番号。FROM_ACCOUNT_ID: 送信者のアカウントID (ミントの場合はNULL)TO_ACCOUNT_ID: 受信者のアカウントID(書き込みの場合はNULL)。EARMARK: トランザクション・アーマーク(TRANSACTION_EARMARKの別名)。FROM_ORG_ID: 送信者の組織ID (または送信者がNULLの場合は受信者と同じ)。TO_ORG_ID: 受信者の組織ID (または受信者がNULLの場合は送信者と同じ)。TRANSACTION_TYPE: トランザクションのタイプ(転送、ミント、バーンなど)。AMOUNT: トランザクション金額。CRDATE: トランザクション作成タイムスタンプ(TXNTIMESTAMP)。