Viste predefinite
Oracle Blockchain Platform Digital Assets Edition fornisce le viste di database predefinite riportate di seguito.
-
ACCOUNT_TRANSACTION_VIEW - Questa vista fornisce una cronologia delle transazioni unificata per conto, acquisendo entrambi i lati dare (
from_account_id) e avere (to_account_id) di una transazione. È possibile utilizzare questa vista per eseguire query su tutte le transazioni collegate a un conto senza eseguire la scansione dei dati raw dello stato del codice concatenato. - Query SQL riservata, proprietario del sistema:
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 NULLOrigini dati:
<obpInstanceName>_<channelName>_state, la tabella di stato principale contenente i dati del codice concatenato in formato JSONLogica chiave:- Include solo le righe in cui le seguenti istruzioni sono vere.
CHAINCODEID = <chaincodeName>assetType = 'otransaction'KEYnon inizia con_obp2pc_transaction_typenon èEXECUTE_HOLD_RECEIVER,EXECUTE_HOLD_SENDERoCREATE_ACCOUNT
- Estrae il coinvolgimento dei conti sia dalle transazioni in uscita (
from_account_id) che dalle transazioni in entrata (to_account_id). - Utilizza
COALESCEper garantire l'ordinamento coerente delle colonne (ORDER_BLOCKNO,ORDER_TXNNO) anche se mancano valori JSON. - Combina le transazioni in uscita e in entrata con un
UNION ALL.
Colonne di output:KEY: ID conto associato alla transazione (mittente o ricevente).TRANSACTION_ID: identificativo univoco della transazione.TRANSACTION_DETAILS: oggetto JSON completo della transazione.ORDER_BLOCKNO: numero di blocco utilizzato per l'ordinazione (da JSON, se disponibile, altrimenti blocca i metadati).ORDER_TXNNO: numero di transazione nel blocco (da JSON, se disponibile, altrimenti blocca i metadati).
- Include solo le righe in cui le seguenti istruzioni sono vere.
- Query SQL dati SourcesConfidential, banca partecipante:
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 NULLOrigini dati:
<obpInstanceName>_<channelName>_state, la tabella di stato principale contenente i dati del codice concatenato in formato JSONLogica chiave:- Include solo le righe in cui le seguenti istruzioni sono vere.
CHAINCODEID = <chaincodeName>assetType = 'otransaction'KEYnon inizia con_obp2pc_transaction_typenon èEXECUTE_HOLD_RECEIVER,EXECUTE_HOLD_SENDERoCREATE_ACCOUNT
- Estrae il coinvolgimento dei conti sia dalle transazioni in uscita (
from_account_id) che dalle transazioni in entrata (to_account_id). - Utilizza
COALESCEper garantire l'ordinamento coerente delle colonne (ORDER_BLOCKNO,ORDER_TXNNO) anche se mancano valori JSON. - Combina le transazioni in uscita e in entrata con un
UNION ALL.
Colonne di output:KEY: ID conto associato alla transazione (mittente o ricevente).TRANSACTION_ID: identificativo univoco della transazione.TRANSACTION_DETAILS: oggetto JSON completo della transazione.ORDER_BLOCKNO: numero di blocco utilizzato per l'ordinazione (da JSON, se disponibile, altrimenti blocca i metadati).ORDER_TXNNO: numero di transazione nel blocco (da JSON, se disponibile, altrimenti blocca i metadati).
- Include solo le righe in cui le seguenti istruzioni sono vere.
-
TRANSACTION_PDC_VIEW - Questa vista fornisce dettagli sul saldo e sull'importo a livello di transazione dalla raccolta dati privata. Garantisce che venga recuperato solo il record più recente per transazione.
- Query SQL riservata, proprietario del sistema:
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}_LINKScopo: aggrega i dati all'interno dell'organizzazione tramite i database link.
Origini dati:<obpInstanceName>_<channelName>_hist: la tabella dati cronologica del codice concatenato contenente i record di raccolta dati privati$TRANSACTION_PDC_VIEW@${org1Name}_LINK: vista remota dall'organizzazione 1 a cui si accede tramite database link.$TRANSACTION_PDC_VIEW@${org2Name}_LINK: vista remota dall'organizzazione 2 accessibile tramite database link.
Logica chiave:- Filtra solo i record in cui le istruzioni seguenti sono vere.
CHAINCODEID = ${implicitPDCName}assetType = 'otransactionpdc'KEYnon inizia con_obp2pc_staged_.
- Utilizza la funzione finestra
ROW_NUMBER().- Partizioni di
transaction_id. - Ordini per
TXNTIMESTAMP DESC. - Conserva solo il record più recente
(rn = 1).
- Partizioni di
- Combina i dati della tabella di raccolta dati privati locali, della vista di raccolta dati privati dell'organizzazione 1 (tramite database link) e della vista di raccolta dati privati dell'organizzazione 2 (tramite database link).
Colonne di output:TRANSACTION_ID: identificativo univoco della transazione.CHAINCODEID: identificativo del codice concatenato associato al record PDC.QUANTITY: importo della transazione o quantità trasferita.FROM_ACCOUNT_BALANCE: saldo del conto del mittente dopo la transazione.FROM_ACCOUNT_ONHOLD_BALANCE: saldo in sospeso del conto mittente dopo la transazione.TO_ACCOUNT_BALANCE: saldo del conto ricevente dopo la transazione.TO_ACCOUNT_ONHOLD_BALANCE: saldo in sospeso del conto ricevente dopo la transazione.
- Query SQL riservata, banca partecipante:
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 = 1Origini dati:<obpInstanceName>_<channelName>_hist: la tabella dati cronologica del codice concatenato contenente i record di raccolta dati privati
Logica chiave:- Filtra solo i record in cui le istruzioni seguenti sono vere.
CHAINCODEID = ${implicitPDCName}assetType = 'otransactionpdc'KEYnon inizia con_obp2pc_staged_.
- Utilizza la funzione finestra
ROW_NUMBER().- Partizioni di
transaction_id. - Ordini per
TXNTIMESTAMP DESC. - Conserva solo il record più recente
(rn = 1).
- Partizioni di
Colonne di output:TRANSACTION_ID: identificativo univoco della transazione.CHAINCODEID: identificativo del codice concatenato associato al record PDC.QUANTITY: importo della transazione o quantità trasferita.FROM_ACCOUNT_BALANCE: saldo del conto del mittente dopo la transazione.FROM_ACCOUNT_ONHOLD_BALANCE: saldo in sospeso del conto mittente dopo la transazione.TO_ACCOUNT_BALANCE: saldo del conto ricevente dopo la transazione.TO_ACCOUNT_ONHOLD_BALANCE: saldo in sospeso del conto ricevente dopo la transazione.
-
ACCOUNTS_VIEW - Questa vista fornisce una vista consolidata dei conti tra le organizzazioni.
- Query SQL riservata, proprietario del sistema:
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 NULLScopo: questa vista fornisce una vista consolidata dei conti tra le organizzazioni, combinando le seguenti informazioni.- Stato conto corrente
- Ultimi dati personali relativi all'account (raccolta di dati privati)
- Metadati del token, ad esempio precisione decimale
- Dettagli account tra organizzazioni tramite database link
Origini dati:<obpInstanceName>_<channelName>_hist: dati cronologici del codice concatenato, utilizzati per recuperare la voce di raccolta dati privata dell'account più recente (oaccountpdc).<obpInstanceName>_<channelName>_state: dati di stato correnti per gli account (oaccount) e i token (otoken).ACCOUNTS_VIEW@<org1Name>_LINK: vista remota dall'organizzazione 1.ACCOUNTS_VIEW@<org2Name>_LINK: vista remota dall'organizzazione 2.
Logica chiave:hist_rankedCTE: recupera il record di raccolta dati privato più recente peraccount_idutilizzandoROW_NUMBER()conORDER BY TXNTIMESTAMP DESC.state_filteredCTE: seleziona gli account (oaccount) dalla tabella di stato.token_detailsCTE: recupera i dettagli del token (otoken) con precisione decimale (impostazione predefinita:0, se mancante).- La selezione finale si unisce: Stato dell'account (
state_filtered) con i dettagli di raccolta dati privati più recenti (hist_ranked) e metadati del token (token_details). - Garantisce solo gli account con la raccolta dati privata associata (
WHERE h.valuejson IS NOT NULL). - Estende i dati degli account con le unioni di database link di altre organizzazioni.
Colonne di output:ACCOUNT_ID: identificativo univoco del conto.ORG_ID: ID organizzazione associato all'account.USER_ID: ID utente collegato all'account (dalla raccolta di dati privati).CUSTOM_ACCOUNT_ID: identificativo account personalizzato definito dall'utente.TOKEN_ID: identificativo token associato all'account.DECIMAL_VALUE: precisione decimale token (impostazione predefinita: 0 se mancante).
- Query SQL riservata, banca partecipante:
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.keyScopo: questa vista fornisce una vista consolidata dei conti tra le organizzazioni, combinando le seguenti informazioni.- Stato conto corrente
- Ultimi dati personali relativi all'account (raccolta di dati privati)
- Metadati del token, ad esempio precisione decimale
Origini dati:<obpInstanceName>_<channelName>_hist: dati cronologici del codice concatenato, utilizzati per recuperare la voce di raccolta dati privata dell'account più recente (oaccountpdc).<obpInstanceName>_<channelName>_state: dati di stato correnti per gli account (oaccount) e i token (otoken).
Logica chiave:hist_rankedCTE: recupera il record di raccolta dati privato più recente peraccount_idutilizzandoROW_NUMBER()conORDER BY TXNTIMESTAMP DESC.state_filteredCTE: seleziona gli account (oaccount) dalla tabella di stato.token_detailsCTE: recupera i dettagli del token (otoken) con precisione decimale (impostazione predefinita:0, se mancante).- La selezione finale si unisce: Stato dell'account (
state_filtered) con i dettagli di raccolta dati privati più recenti (hist_ranked) e metadati del token (token_details). - Garantisce solo gli account con la raccolta dati privata associata (
WHERE h.valuejson IS NOT NULL).
Colonne di output:ACCOUNT_ID: identificativo univoco del conto.ORG_ID: ID organizzazione associato all'account.USER_ID: ID utente collegato all'account (dalla raccolta di dati privati).CUSTOM_ACCOUNT_ID: identificativo account personalizzato definito dall'utente.TOKEN_ID: identificativo token associato all'account.DECIMAL_VALUE: precisione decimale token (impostazione predefinita: 0 se mancante).
-
ACCOUNTS_MOD - Questa vista fornisce una rappresentazione strutturata dei dati del registro dei token fungibili, mappando le organizzazioni e gli utenti ai conti e ai token fungibili associati. Semplifica l'accesso alle relazioni account-token memorizzate nello stato del codice concatenato semplificando gli array JSON nidificati, rendendo più facile il consumo di applicazioni e query di analisi.
- Query SQL generica, 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`Origini dati:<obpInstanceName>_<channelName>_state: la tabella di stato principale contenente i dati del codice concatenato in formato JSON.
Logica chiave:- Filtra per chiave di registro: include solo i record in cui la chiave contiene
oftregistry. - Filtra per codice concatenato: limita i risultati al codice concatenato specificato (
<chaincodeName>). - Appiattisci JSON nidificato: utilizza
JSON_TABLEper espandere l'arrayassociated_ft_accountsin righe separate per ogni coppia account-token.account_id: identificativo dell'account token fungibile.token_id: token collegato all'account.lng_number: Ordinalità (utilizzata internamente per tenere traccia dell'ordine degli array).
- Ordinamento: i risultati vengono ordinati in base al numero di blocco (
blockno) e al numero di transazione (txnno) in ordine decrescente, assicurando che le associazioni più recenti vengano visualizzate per prime.
Colonne di output:BLOCKNO: numero di blocco in cui è stato registrato l'aggiornamento del registro.TXNNO: numero di transazione nel blocco.KEY: chiave di stato che rappresenta la voce del registro dei token fungibili.ASSETTYPE: tipo di asset (previsto:oftregistry).ORG_ID: identificativo dell'organizzazione dal file JSON.USER_ID: identificativo utente associato al record del registro.ACCOUNT_ID: ID account token fungibile estratto dall'array nidificato.TOKEN_ID: ID token estratto collegato all'account token fungibile.
- Query SQL generica, Vai:
`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`Questa vista è uguale alla query SQL generica, vista TypeScript. L'unica differenza è nella convenzione di denominazione del campo JSON, che utilizza la maiuscola Pascal anziché la minuscola.AssetType: precedentementeassetTypeOrgId: precedentementeorg_idUserId: precedentementeuser_idAssociatedFtAccounts: precedentementeassociated_ft_accountsAccountId: precedentementeaccount_idTokenId: precedentementetoken_id
OrgId AS org_id) per mantenere coerenti i nomi delle colonne di output tra le viste. - Query SQL riservata, proprietario del sistema:
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;Origini dati:<obpInstanceName>_<channelName>_hist: tabella di cronologia che memorizza le modifiche cronologiche dei dati privati dell'account (oaccountpdc).<obpInstanceName>_<channelName>_state: tabella di stato contenente lo stato corrente del codice concatenato in formato JSON, utilizzata per i dettaglioaccounteotoken.- Viste dell'organizzazione remota: i dati aggiuntivi delle viste ACCOUNTS_MOD in altre organizzazioni vengono inclusi utilizzando i database link:
"ACCOUNTS_MOD"@<org1Name>_LINK"ACCOUNTS_MOD"@<org2Name>_LINK"ACCOUNTS_MOD"@<org3Name>_LINK
Logica chiave:- Classifica record cronologici: utilizza
ROW_NUMBER()per selezionare il recordoaccountpdcpiù recente per ogni ID cliente dalla tabella della cronologia. - Filtra conti correnti: recupera solo i record con
assetType = 'oaccount'dalla tabella dello stato. - Metadati token join: aggiunge la precisione del token (
decimal_value) unendo le vociotokennella tabella di stato. - Combina dettagli account: unisce i record account filtrati con la voce cronologia e i dettagli token più recenti. Garantisce che vengano inclusi solo gli account con dati cronologici validi (
h.valuejson IS NOT NULL). - Unione più organizzazioni: utilizza
UNION ALLper unire i dati dell'account dell'organizzazione locale con più organizzazioni remote tramite i database link. Ciò consente a un'unica query unificata di recuperare tutti gli account nella rete.
Colonne di output:ACCOUNT_ID: identificativo univoco del conto.ORG_ID: ID dell'organizzazione proprietaria del conto.USER_ID: ID utente collegato all'account (dall'ultimo record cronologico).CUSTOM_ACCOUNT_ID: identificativo dell'account personalizzato facoltativo.TOKEN_ID: identificativo token associato all'account.DECIMAL_VALUE: precisione decimale token (impostazione predefinita: 0 se mancante).
Generazione dinamica: la parte multi-organizzazione non è codificata. Nello script, le unioni aggiuntive vengono generate in modo dinamico in base al file
Participant_orgs_list.yml. Ciò garantisce che la vista si adatti automaticamente a seconda del numero di organizzazioni configurate nella rete. La query di esempio mostra tre organizzazioni per maggiore chiarezza, ma in pratica il numero di unioni dipende dalla dimensione diorgsList. Per ulteriori dettagli, vedere le informazioni precedenti sul fileParticipant_orgs_list.ymlin questo argomento. - Query SQL riservata, banca partecipante:
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;Questa vista è uguale alla query SQL riservata, proprietario del sistema, ma recupera i dati solo per l'organizzazione locale. Le principali differenze sono le seguenti:- Non viene utilizzato alcun
UNION ALLcon database link. - L'output include solo i conti delle tabelle dello stato e della cronologia dell'organizzazione corrente.
- La vista fornisce un registro di conti a organizzazione singola, a differenza della variante a più organizzazioni che consolida i conti tra più organizzazioni.
- Non viene utilizzato alcun
-
TRANSACTION_MOD - Questa vista fornisce un record dettagliato di tutte le transazioni blockchain, acquisendo metadati, partecipanti, importi e saldi risultanti. Semplifica l'accesso alla cronologia delle transazioni estraendo i campi strutturati direttamente dalla tabella di cronologia, eliminando la necessità di analizzare manualmente JSON non elaborato.
- Query SQL generica, 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`Origini dati:
<obpInstanceName>_<channelName>_hist, la tabella di cronologia contenente tutti gli eventi di transazione in formato JSON. Include sia i dettagli della transazione che i metadati associati (blocco, numero di transazione, indicatore orario).Logica chiave:- Include solo le righe in cui le seguenti istruzioni sono vere.
CHAINCODEID = <chaincodeName>KEYcontieneotransaction(filtri per i record relativi alle transazioni)
- Gli ordini vengono eseguiti nel modo seguente.
blockno DESC(prima il blocco più recente)txnno DESC(prima la transazione più recente all'interno del blocco)
Colonne di output:BLOCKNO: numero di blocco in cui è stata registrata la transazione.TXNNO: numero di transazione nel blocco.KEY: identificativo univoco della voce di transazione.TXNTIMESTAMP: indicatore orario al completamento della transazione.ASSETTYPE: tipo di cespite per la transazione (ad esempio,otransaction).TRANSACTION_ID: identificativo univoco della transazione.FROM_ACCOUNT_ID: ID conto da cui ha avuto origine il cespite o il valore.TO_ACCOUNT_ID: ID conto a cui è stato trasferito il cespite o il valore.TRANSACTION_TYPE: tipo di transazione (ad esempio trasferimento, addebito, accredito).AMOUNT: importo coinvolto nella transazione.TRANSACTION_EARMARK: categoria o indirizzo per la transazione.FROM_ACCOUNT_BALANCE: saldo del conto di origine dopo la transazione.TO_ACCOUNT_BALANCE: saldo del conto di destinazione dopo la transazione.
- Include solo le righe in cui le seguenti istruzioni sono vere.
- Query SQL generica, Vai:
`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`Questa vista è uguale alla query SQL generica, vista TypeScript. L'unica differenza è nella convenzione di denominazione del campo JSON, che utilizza la maiuscola Pascal anziché la minuscola.AssetType: precedentementeassetTypeTransactionId: precedentementetransaction_idFromAccountId: precedentementefrom_account_idToAccountId: precedentementeto_account_idTransactionType: precedentementetransaction_typeAmount: precedentementeamountCategory: precedentementecategoryFromAccountBalance: precedentementefrom_account_balanceToAccountBalance: precedentementeto_account_balance
TransactionId AS transaction_id) per mantenere coerenti i nomi delle colonne di output tra le viste, indipendentemente dalla convenzione di denominazione dei campi JSON. - Query SQL riservata, proprietario del sistema:
`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`Origini dati:<obpInstanceName>_<channelName>_hist: tabella cronologica dei codici concatenati che memorizza tutte le versioni delle transazioni.<transactionPDCViewName>: vista contenente i dettagli delle transazioni di raccolta dati privati uniti per arricchire i record delle transazioni.ACCOUNTS_MOD: vista di riferimento utilizzata per recuperare il valoredecimal_valuecorretto per i saldi conto e gli importi transazione.
Logica chiave:- Filtra solo le righe in cui le seguenti istruzioni sono vere.
CHAINCODEID = <chaincodeName>assetType = 'otransaction'KEYnon inizia con_obp2pc_staged_
- Utilizza
ROW_NUMBER()partizionato datransaction_id(ordinato datxntimestamp DESC) per garantire che sia incluso solo il record più recente per transazione. - Recupera dinamicamente
decimal_valuedaACCOUNTS_MODin base al fatto che la transazione coinvolga un valorefrom_account_idoto_account_id. - Gli importi e i saldi (
amount,from_account_balance,to_account_balance) vengono scalati con precisione decimale utilizzando:value / POWER(10, decimal_value) - Utilizza
COALESCEinblockNoetxnNoper garantire che le colonne di ordinamento siano sempre presenti, anche se mancanti in JSON.
Colonne di output:BLOCKNO: numero di blocco per l'ordinazione (da JSON, se disponibile, altrimenti dai metadati).TXNNO: numero di transazione nel blocco (da JSON, se disponibile, altrimenti dai metadati).KEY: identificativo chiave transazione.TXNTIMESTAMP: indicatore orario della transazione.ASSETTYPE: tipo di asset (otransaction).TRANSACTION_ID: identificativo univoco della transazione.FROM_ACCOUNT_ID: ID account da cui sono stati inviati i token.TO_ACCOUNT_ID: ID account a cui sono stati inviati i token.TRANSACTION_TYPE: tipo di transazione, ad esempio trasferimento, blocco, rilascio.AMOUNT: importo della transazione, scalato in base alla precisione decimale del token.TRANSACTION_EARMARK: categoria o indirizzo della transazione.FROM_ACCOUNT_BALANCE: Saldo del conto del mittente dopo la transazione, scalato con precisione.TO_ACCOUNT_BALANCE: saldo del conto del ricevente dopo la transazione, ridimensionato in base alla precisione.
- Query SQL riservata, banca partecipante:
`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`Origini dati:<obpInstanceName>_<channelName>_hist: tabella cronologica dei codici concatenati contenente tutte le versioni delle transazioni in formato JSON.<transactionPDCViewName>: vista di raccolta dati privati che contiene dati privati a livello di transazione. È unito alla cronologia per arricchire il record transazione.ACCOUNTS_MOD: vista utilizzata per recuperare la precisione decimale del token corretta (decimal_value) per i conti coinvolti nelle transazioni.
Logica chiave:- Filtra solo le righe in cui le seguenti istruzioni sono vere.
CHAINCODEID = <chaincodeName>assetType = 'otransaction'- Esclude le transazioni messe in attesa (
KEY NOT LIKE '_obp2pc_staged_%')
- Ridimensionamento decimale: recupera dinamicamente
decimal_valuedaACCOUNTS_MOD, in base afrom_account_idoto_account_id. Applica la scala aamount,from_account_balanceeto_account_balanceutilizzando:value / POWER(10, decimal_value) - Selezione record: utilizza
ROW_NUMBER()partizionato datransaction_id(più recente daTXNTIMESTAMP) per garantire che venga restituita solo la versione più recente di ogni transazione. - Normalizzazione dei dati:
COALESCEviene applicato sublockNoetxnNoper garantire la coerenza anche se mancano i valori nel payload JSON.
Colonne di output:BLOCKNO: numero di blocco utilizzato per l'ordinazione (da JSON, se disponibile, altrimenti dai metadati).TXNNO: numero di transazione nel blocco (da JSON, se disponibile, altrimenti dai metadati).KEY: identificativo chiave transazione.TXNTIMESTAMP: indicatore orario della transazione.ASSETTYPE: tipo di asset (otransaction).TRANSACTION_ID: identificativo univoco della transazione.FROM_ACCOUNT_ID: ID account che invia i token.TO_ACCOUNT_ID: ID account che riceve i token.TRANSACTION_TYPE: tipo di transazione, ad esempio trasferimento, blocco, rilascio.AMOUNT: importo transazione, normalizzato utilizzando la precisione decimale del token.TRANSACTION_EARMARK: categoria o indirizzo per la transazione.FROM_ACCOUNT_BALANCE: saldo del conto del mittente dopo la transazione (adeguato alla precisione).TO_ACCOUNT_BALANCE: saldo del conto ricevente dopo la transazione (adeguato alla precisione).
-
ACCOUNTS_TRANSACTION_MOD - Questa vista estende la cronologia delle transazioni associando ogni transazione agli ID organizzazione dei conti partecipanti. Supporta approvazioni di masterizzazione, approvazioni di zecca e trasferimenti regolari, assicurando che le transazioni includano sia il contesto a livello di conto che a livello di organizzazione.
- Query SQL generica, TypeScript e Vai:
`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`Origini dati:<transactionViewName> (A): fornisce dettagli sulle transazioni di base quali ID, numeri di blocco, conti, importi e indicatori orari.<accountsViewName> (B, C): mappa i conti (ACCOUNT_ID) alle organizzazioni (ORG_ID) sia per il mittente che per il destinatario.
Logica chiave: la vista viene creata utilizzando unUNIONdi tre casi:APPROVE_BURN- Iscriviti su
FROM_ACCOUNT_ID = B.ACCOUNT_ID. - Assegnare
B.ORG_IDsia aFROM_ORG_IDche aTO_ORG_ID.
- Iscriviti su
APPROVE_MINT- Iscriviti su
TO_ACCOUNT_ID = C.ACCOUNT_ID. - Assegnare
C.ORG_IDsia aFROM_ORG_IDche aTO_ORG_ID.
- Iscriviti su
- Trasferimenti regolari
- Iscriviti su
FROM_ACCOUNT_ID = B.ACCOUNT_IDeTO_ACCOUNT_ID = C.ACCOUNT_ID. - Assegnare
B.ORG_IDcomeFROM_ORG_IDeC.ORG_IDcomeTO_ORG_ID.
- Iscriviti su
BLOCKNO DESCper dare priorità alle transazioni più recenti.Colonne di output:TRANSACTION_ID: identificativo univoco della transazione.BLOCKNO: numero di blocco in cui è stata registrata la transazione.FROM_ACCOUNT_ID: ID account del mittente.TO_ACCOUNT_ID: ID conto del destinatario.EARMARK: categoria di destinazione delle transazioni (aliasTRANSACTION_EARMARK).FROM_ORG_ID: ID organizzazione dell'account del mittente (o uguale aTOper la masterizzazione).TO_ORG_ID: ID organizzazione del conto del destinatario (o uguale aFROMper mint).TRANSACTION_TYPE: tipo di transazione (APPROVE_BURN,APPROVE_MINTo trasferimento).AMOUNT: importo transazione.CRDATE: data di creazione della transazione (daTXNTIMESTAMP).
- Query SQL riservata, proprietario del sistema e banca partecipante:
`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 DESCOrigini dati:<transactionViewName> (A): fornisce dati a livello di transazione (ID, numeri di blocco, riferimenti conto, importi, indicatori orari).<accountsViewName> (B, C): fornisce il mapping traACCOUNT_IDeORG_ID.
Logica chiave: la vista utilizzaUNIONper unire i risultati di tre pattern di transazione:- Transazioni solo per mittenti (ad esempio, casi in uscita o simili a ustioni)
- Condizione:
A.FROM_ACCOUNT_ID = B.ACCOUNT_IDeA.TO_ACCOUNT_ID IS NULL. - Esclude il tipo di transazione
CREATE_ACCOUNT. - Sia
FROM_ORG_IDcheTO_ORG_IDderivano dall'organizzazione del mittente (B.ORG_ID).
- Condizione:
- Transazioni solo riceventi (ad esempio, casi in entrata o simili alla zecca)
- Condizione:
A.TO_ACCOUNT_ID = C.ACCOUNT_IDeA.FROM_ACCOUNT_ID IS NULL. - Sia
FROM_ORG_IDcheTO_ORG_IDderivano dall'organizzazione del destinatario (C.ORG_ID).
- Condizione:
- Trasferimenti standard (transazioni con mittente e ricevente)
- Condizione:
A.FROM_ACCOUNT_ID = B.ACCOUNT_IDeA.TO_ACCOUNT_ID = C.ACCOUNT_ID. FROM_ORG_IDproviene dall'organizzazione del mittente (B.ORG_ID),TO_ORG_IDdall'organizzazione del destinatario (C.ORG_ID).
- Condizione:
BLOCKNOper assegnare la priorità alle transazioni più recenti.Colonne di output:TRANSACTION_ID: identificativo univoco della transazione.BLOCKNO: numero di blocco in cui viene registrata la transazione.FROM_ACCOUNT_ID: ID account del mittente (può essereNULLper mint).TO_ACCOUNT_ID: ID del conto del destinatario (può essereNULLper la masterizzazione).EARMARK: earmark di transazione (alias diTRANSACTION_EARMARK).FROM_ORG_ID: ID organizzazione del mittente (o del destinatario se il mittente èNULL).TO_ORG_ID: ID dell'organizzazione del destinatario (o lo stesso del mittente se il destinatario èNULL).TRANSACTION_TYPE: tipo di transazione (ad esempio trasferimento, menta, masterizzazione e così via).AMOUNT: importo transazione.CRDATE: indicatore orario di creazione della transazione (TXNTIMESTAMP).