事前定義済ビュー
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
データ・ソース:
<obpInstanceName>_<channelName>_state
(チェーンコード・データをJSON形式で保持するプライマリ状態表)キー・ロジック:- 次の文が真である行のみが含まれます。
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、それ以外の場合はブロック・メタデータ)。
- 次の文が真である行のみが含まれます。
- データ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
データ・ソース:
<obpInstanceName>_<channelName>_state
(チェーンコード・データをJSON形式で保持するプライマリ状態表)キー・ロジック:- 次の文が真である行のみが含まれます。
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
- このビューには、プライベート・データ・コレクションからのトランザクション・レベルの残高および金額の詳細が表示されます。これにより、トランザクションごとに最新のレコードのみが取得されます。
- 機密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
: トランザクションの一意の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_ranked
CTE:ORDER BY TXNTIMESTAMP DESC
を指定したROW_NUMBER()
を使用して、account_id
ごとの最新のプライベート・データ収集レコードを取得します。state_filtered
CTE: 状態表からアカウント(oaccount
)を選択します。token_details
CTE: 10進精度でトークン詳細(otoken
)を取得します(欠落している場合はデフォルト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_ranked
CTE:ORDER BY TXNTIMESTAMP DESC
を指定したROW_NUMBER()
を使用して、account_id
ごとの最新のプライベート・データ収集レコードを取得します。state_filtered
CTE: 状態表からアカウント(oaccount
)を選択します。token_details
CTE: 10進精度でトークン詳細(otoken
)を取得します(欠落している場合はデフォルト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
: 脆弱なトークン・アカウント識別子。token_id
: アカウントにリンクされたトークン。lng_number
: オーディナリティ(配列の順序を追跡するために内部的に使用されます)。
- 順序付け: 結果は、ブロック番号(
blockno
)およびトランザクション番号(txnno
)で降順にソートされ、最新の関連付けが最初に表示されます。
出力列:BLOCKNO
: レジストリ更新が記録されたブロック番号。TXNNO
: ブロック内のトランザクション番号。KEY
: 実行可能なトークン・レジストリ・エントリを表す状態キー。ASSETTYPE
: アセットのタイプ(想定:oftregistry
)。ORG_ID
: JSONの組織識別子。USER_ID
: レジストリ・レコードに関連付けられたユーザー識別子。ACCOUNT_ID
: ネストされた配列からfungibleトークン・アカウント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
: 以前のassetType
OrgId
: 以前のorg_id
UserId
: 以前のuser_id
AssociatedFtAccounts
: 以前のassociated_ft_accounts
AccountId
: 以前のaccount_id
TokenId
: 以前の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
: 現在のチェーンコード状態をJSON形式で保持する状態表。oaccount
およびotoken
の詳細に使用されます。- リモート組織ビュー: 他の組織のACCOUNTS_MODビューからの追加データは、データベース・リンクを使用して含まれます。
"ACCOUNTS_MOD"@<org1Name>_LINK
"ACCOUNTS_MOD"@<org2Name>_LINK
"ACCOUNTS_MOD"@<org3Name>_LINK
キー・ロジック:- 履歴レコードのランク付け:
ROW_NUMBER()
を使用して、履歴表から各アカウントIDの最新のoaccountpdc
レコードを選択します。 - Filter Current Accounts: 状態表から
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
: トランザクションのカテゴリまたはイヤマーク。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
: 以前のassetType
TransactionId
: 以前のtransaction_id
FromAccountId
: 以前のfrom_account_id
ToAccountId
: 以前のto_account_id
TransactionType
: 以前のtransaction_type
Amount
: 以前のamount
Category
: 以前のcategory
FromAccountBalance
: 以前のfrom_account_balance
ToAccountBalance
: 以前のto_account_balance
TransactionId AS transaction_id
など)が適用されます。 - 機密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
のどちらが含まれるかに基づいて、decimal_value
をACCOUNTS_MOD
から動的にフェッチします。 - 金額と残高(
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
: トークン10進精度でスケーリングされたトランザクション量。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
: トランザクションに関連するアカウントの正しいトークン10進精度(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
によって最新)を使用して、各トランザクションの最新バージョンのみが返されるようにします。 - データ正規化: JSONペイロードに値がない場合でも一貫性を確保するために、
COALESCE
がblockNo
およびtxnNo
に適用されます。
出力列:BLOCKNO
: 順序付けに使用されるブロック番号(使用可能な場合はJSONから、それ以外の場合はメタデータから)。TXNNO
: ブロック内のトランザクション番号(使用可能な場合はJSONから、それ以外の場合はメタデータから)。KEY
: トランザクション・キー識別子。TXNTIMESTAMP
: トランザクションのタイムスタンプ。ASSETTYPE
: アセット・タイプ(otransaction
)。TRANSACTION_ID
: トランザクションの一意のID。FROM_ACCOUNT_ID
: トークンを送信するアカウントID。TO_ACCOUNT_ID
: トークンを受信するアカウントID。TRANSACTION_TYPE
: トランザクションのタイプ(転送、保留、リリースなど)。AMOUNT
: トークン10進精度を使用して正規化されたトランザクション量。TRANSACTION_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)
: 送信者と受信者の両方の組織(ORG_ID
)にアカウント(ACCOUNT_ID
)をマップします。
キー・ロジック: ビューは、次の3つのケースのUNION
を使用して構築されます。APPROVE_BURN
FROM_ACCOUNT_ID = B.ACCOUNT_ID
に参加します。B.ORG_ID
をFROM_ORG_ID
とTO_ORG_ID
の両方に割り当てます。
APPROVE_MINT
TO_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
: トランザクションの一意のID。BLOCKNO
: トランザクションが記録されたブロック番号。FROM_ACCOUNT_ID
: 送信者のアカウントID。TO_ACCOUNT_ID
: 受信者のアカウントID。EARMARK
: トランザクション・イヤマーク・カテゴリ(別名TRANSACTION_EARMARK
)。FROM_ORG_ID
: 送信者のアカウントの組織ID(または書き込み用のTO
と同じ)。TO_ORG_ID
: 受信者のアカウントの組織ID(またはmintの場合は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
は、送信者の組織(B.ORG_ID
)、受信者の組織(C.ORG_ID
)のTO_ORG_ID
から取得されます。
- 条件:
BLOCKNO
の降順にソートされ、最新のトランザクションに優先順位が付けられます。出力列:TRANSACTION_ID
: トランザクションの一意のID。BLOCKNO
: トランザクションが記録されるブロック番号。FROM_ACCOUNT_ID
: 送信者のアカウントID(mintの場合はNULL
)。TO_ACCOUNT_ID
: 受信者のアカウントID(書き込みの場合はNULL
の場合もあります)。EARMARK
: トランザクション・イヤマーク(別名TRANSACTION_EARMARK
)。FROM_ORG_ID
: 送信者の組織ID(または送信者がNULL
の場合は受信者と同じ)。TO_ORG_ID
: 受信者の組織ID (受信者がNULL
の場合は送信者と同じ)。TRANSACTION_TYPE
: トランザクションのタイプ(転送、ミント、バーンなど)。AMOUNT
: トランザクション金額。CRDATE
: トランザクション作成タイムスタンプ(TXNTIMESTAMP
)。