事前定義済ビュー

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_typeEXECUTE_HOLD_RECEIVEREXECUTE_HOLD_SENDERまたはCREATE_ACCOUNTではありません
  • 送信トランザクション(from_account_id)と受信トランザクション(to_account_id)の両方からアカウント関与を抽出します。
  • COALESCEを使用して、JSON値がない場合でも、列(ORDER_BLOCKNOORDER_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_typeEXECUTE_HOLD_RECEIVEREXECUTE_HOLD_SENDERまたはCREATE_ACCOUNTではありません
  • 送信トランザクション(from_account_id)と受信トランザクション(to_account_id)の両方からアカウント関与を抽出します。
  • COALESCEを使用して、JSON値がない場合でも、列(ORDER_BLOCKNOORDER_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
JSONフィールドの命名規則に関係なく、ビュー間で出力列名の一貫性を保つために、別名(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_valueACCOUNTS_MODから動的にフェッチします。
  • 金額と残高(amountfrom_account_balanceto_account_balance)は、value / POWER(10, decimal_value) を使用して小数点精度でスケーリングされます。
  • blockNoおよびtxnNoCOALESCEを使用して、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_valueACCOUNTS_MODから動的にフェッチします。value / POWER(10, decimal_value)を使用して、amountfrom_account_balanceおよびto_account_balanceにスケーリングを適用します。
  • レコードの選択: transaction_idによってパーティション化されたROW_NUMBER() (TXNTIMESTAMPによって最新)を使用して、各トランザクションの最新バージョンのみが返されるようにします。
  • データ正規化: JSONペイロードに値がない場合でも一貫性を確保するために、COALESCEblockNoおよび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を使用して構築されます。
  1. APPROVE_BURN
    • FROM_ACCOUNT_ID = B.ACCOUNT_IDに参加します。
    • B.ORG_IDFROM_ORG_IDTO_ORG_IDの両方に割り当てます。
  2. APPROVE_MINT
    • TO_ACCOUNT_ID = C.ACCOUNT_IDに参加します。
    • C.ORG_IDFROM_ORG_IDTO_ORG_IDの両方に割り当てます。
  3. 通常振替
    • FROM_ACCOUNT_ID = B.ACCOUNT_IDおよびTO_ACCOUNT_ID = C.ACCOUNT_IDで結合します。
    • B.ORG_IDFROM_ORG_IDC.ORG_IDTO_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_BURNAPPROVE_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_IDORG_IDの間のマッピングを提供します。
キー・ロジック: ビューでは、UNIONを使用して、次の3つのトランザクション・パターンの結果をマージします。
  1. 送信者専用トランザクション(発信またはバーンライク・ケースなど)
    • 条件: A.FROM_ACCOUNT_ID = B.ACCOUNT_IDおよびA.TO_ACCOUNT_ID IS NULL
    • CREATE_ACCOUNTトランザクション・タイプを除外します。
    • FROM_ORG_IDTO_ORG_IDの両方が、送信者の組織(B.ORG_ID)から導出されます。
  2. 受信者のみのトランザクション(受信またはミントのようなケースなど)
    • 条件: A.TO_ACCOUNT_ID = C.ACCOUNT_IDおよびA.FROM_ACCOUNT_ID IS NULL
    • FROM_ORG_IDTO_ORG_IDの両方が、受信者の組織(C.ORG_ID)から導出されます。
  3. 標準転送(送信者と受信者の両方を含むトランザクション)
    • 条件: 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)。