미리 정의된 보기
Oracle Blockchain Platform Digital Assets Edition은 다음과 같은 사전 정의된 데이터베이스 뷰를 제공합니다.
-
ACCOUNT_TRANSACTION_VIEW
- 이 뷰는 트랜잭션의 차변(
from_account_id
) 및 대변(to_account_id
) 측면을 모두 캡처하는 계정당 통합 트랜잭션 내역을 제공합니다. 이 보기를 사용하여 원시 체인코드 상태 데이터를 스캔하지 않고 계정에 연결된 모든 트랜잭션을 쿼리할 수 있습니다. - 기밀 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
: 트랜잭션의 고유 식별자로,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
: 거래의 고유 식별자로,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
목적: 데이터베이스 링크를 통해 조직 전체의 데이터를 집계합니다.
Data Sources:<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
: 거래 후 수령인 계정의 보류 잔액입니다.
- Confidential SQL Query, 참여자 은행:
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
Data Sources:<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
목적: 이 뷰는 다음 정보를 결합하여 조직 전체의 계정에 대한 통합 뷰를 제공합니다.- 현재 계정 상태
- 최신 계정 관련 개인 데이터(개인 데이터 수집)
- 소수점 이하 자릿수와 같은 토큰 메타데이터
- 데이터베이스 링크를 통한 조직 간 계정 세부정보
Data Sources:<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: 소수점 이하 자릿수가 있는 토큰 세부정보(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
: 토큰 소수점 이하 자릿수입니다. 누락된 경우 기본값은 0입니다.
- Confidential SQL Query, 참여자 은행:
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
목적: 이 뷰는 다음 정보를 결합하여 조직 전체의 계정에 대한 통합 뷰를 제공합니다.- 현재 계정 상태
- 최신 계정 관련 개인 데이터(개인 데이터 수집)
- 소수점 이하 자릿수와 같은 토큰 메타데이터
Data Sources:<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: 소수점 이하 자릿수가 있는 토큰 세부정보(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
: 토큰 소수점 이하 자릿수입니다. 누락된 경우 기본값은 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`
Data Sources:<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
: 중첩된 배열에서 추출된 대체 가능 토큰 계정 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;
Data Sources:<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
)를 추가합니다. - Combine Account Details: 필터링된 고객사 레코드를 최근 내역 항목 및 토큰 세부 정보와 결합합니다. 적합한 과거 데이터(
h.valuejson IS NOT NULL
)가 있는 계정만 포함되도록 합니다. - Multi-Org Union:
UNION ALL
를 사용하여 데이터베이스 링크를 통해 로컬 조직의 계정 데이터를 여러 원격 조직과 병합합니다. 이렇게 하면 단일 통합 쿼리가 네트워크를 통해 모든 계정을 검색할 수 있습니다.
출력 열:ACCOUNT_ID
: 계정의 고유한 식별자입니다.ORG_ID
: 계정을 소유한 조직 ID입니다.USER_ID
: 최근 내역 레코드의 고객사에 연결된 사용자 ID입니다.CUSTOM_ACCOUNT_ID
: 선택적 사용자정의 사용자 정의 계정 식별자입니다.TOKEN_ID
: 계정과 연관된 토큰 식별자입니다.DECIMAL_VALUE
: 토큰 소수점 이하 자릿수입니다. 누락된 경우 기본값은 0입니다.
동적 생성: 다중 조직 부품이 하드코딩되지 않았습니다. 스크립트에서
Participant_orgs_list.yml
파일에 따라 추가 조합이 동적으로 생성됩니다. 이렇게 하면 네트워크에 구성된 조직 수에 따라 뷰가 자동으로 조정됩니다. 예제 query는 명확성을 위해 세 개의 조직을 표시하지만 실제로는 조합의 수가orgsList
의 크기에 따라 다릅니다. 자세한 내용은 이 항목의Participant_orgs_list.yml
파일에 대한 이전 정보를 참조하십시오. - Confidential SQL Query, 참여자 은행:
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;
이 뷰는 Confidential SQL Query, System Owner와 동일하지만 로컬 조직에 대해서만 데이터를 검색합니다. 주요 차이점은 다음과 같습니다.- 데이터베이스 링크가 있는
UNION ALL
는 사용되지 않습니다. - 출력에는 현재 조직의 상태 및 기록 테이블의 계정만 포함됩니다.
- 이 뷰는 여러 조직에 걸쳐 계정을 통합하는 다중 조직 변형과 달리 단일 조직 계정 레지스트리를 제공합니다.
- 데이터베이스 링크가 있는
-
TRANSACTION_MOD
- 이 뷰는 메타데이터, 참가자, 금액 및 결과 잔액을 캡처하는 모든 블록체인 트랜잭션의 세부 레코드를 제공합니다. 기록 테이블에서 직접 구조화된 필드를 추출하여 트랜잭션 기록에 대한 액세스를 단순화하므로 원시 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`
Data Sources:<obpInstanceName>_<channelName>_hist
: 모든 트랜잭션 버전을 저장하는 과거 체인코드 테이블입니다.<transactionPDCViewName>
: 트랜잭션 레코드 보강에 조인된 개인 데이터 수집 트랜잭션 세부정보를 포함하는 뷰입니다.ACCOUNTS_MOD
: 계정 잔액 및 트랜잭션 금액에 대한 올바른decimal_value
을 가져오는 데 사용되는 참조 보기입니다.
키 논리:- 다음 명령문이 참인 행만 필터링합니다.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
KEY
는_obp2pc_staged_
로 시작하지 않습니다.
transaction_id
(txntimestamp DESC
순서)로 분할된ROW_NUMBER()
를 사용하여 트랜잭션당 최신 레코드만 포함되도록 합니다.- 트랜잭션에
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
: 거래 후 수령인 계정의 잔액으로, 소수점 이하 자릿수로 배율 조정됩니다.
- Confidential SQL Query, 참여자 은행:
`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`
Data Sources:<obpInstanceName>_<channelName>_hist
: JSON 형식의 모든 트랜잭션 버전을 포함하는 과거 체인코드 테이블입니다.<transactionPDCViewName>
: 트랜잭션 레벨 개인 데이터를 보유하는 개인 데이터 수집 뷰입니다. 트랜잭션 레코드를 보강하기 위해 기록과 조인됩니다.ACCOUNTS_MOD
: 트랜잭션과 관련된 계정에 대한 올바른 토큰 소수점 이하 자릿수(decimal_value
)를 검색하는 데 사용되는 뷰입니다.
키 논리:- 다음 명령문이 참인 행만 필터링합니다.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
- 스테이지된 트랜잭션 제외(
KEY NOT LIKE '_obp2pc_staged_%'
)
- 십진수 크기 조정:
from_account_id
또는to_account_id
를 기반으로ACCOUNTS_MOD
에서 동적으로decimal_value
를 인출합니다.value / POWER(10, decimal_value)
를 사용하여amount
,from_account_balance
및to_account_balance
에 스케일링을 적용합니다. - 레코드 선택: 각 트랜잭션의 최신 버전만 반환되도록 하려면
transaction_id
(최신TXNTIMESTAMP
)로 분할된ROW_NUMBER()
를 사용합니다. - 데이터 정규화:
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
: 트랜잭션에 대한 범주 또는 약어입니다.FROM_ACCOUNT_BALANCE
: 트랜잭션 후 발신자 계정의 잔액(전체 자릿수 조정)입니다.TO_ACCOUNT_BALANCE
: 트랜잭션 후 수령인 계정의 잔액(정밀 조정)입니다.
-
ACCOUNTS_TRANSACTION_MOD
- 이 뷰는 각 거래를 참여 계정의 조직 ID와 연계하여 거래 기록을 확장합니다. 레코딩 승인, 민트 승인 및 정기 이전을 지원하여 트랜잭션에 계정 수준 및 조직 수준 컨텍스트가 모두 포함되도록 합니다.
- 일반 SQL 질의, TypeScript 및 실행:
`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`
Data Sources:<transactionViewName> (A)
: ID, 블록 번호, 계정, 금액 및 시간 기록과 같은 핵심 트랜잭션 세부정보를 제공합니다.<accountsViewName> (B, C)
: 발신자와 수신자 모두에 대해 계정(ACCOUNT_ID
)을 조직(ORG_ID
)에 매핑합니다.
키 논리: 뷰는 다음 세 가지 사례 중UNION
를 사용하여 작성됩니다.APPROVE_BURN
FROM_ACCOUNT_ID = B.ACCOUNT_ID
에 가입하십시오.FROM_ORG_ID
및TO_ORG_ID
에B.ORG_ID
를 지정합니다.
APPROVE_MINT
TO_ACCOUNT_ID = C.ACCOUNT_ID
에 가입하십시오.FROM_ORG_ID
및TO_ORG_ID
에C.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
Data Sources:<transactionViewName> (A)
: 트랜잭션 레벨 데이터(ID, 블록 번호, 계정 참조, 금액, 시간 기록)를 제공합니다.<accountsViewName> (B, C)
:ACCOUNT_ID
와ORG_ID
간의 매핑을 제공합니다.
주요 논리: 이 뷰는UNION
를 사용하여 다음 세 가지 트랜잭션 패턴의 결과를 병합합니다.- 발신자 전용 트랜잭션(예: 발신 또는 번 유사 케이스)
- 조건:
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
: 거래의 고유 식별자로,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
)입니다.