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 NULL
Origini 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'
KEY
non inizia con_obp2pc_
transaction_type
non èEXECUTE_HOLD_RECEIVER
,EXECUTE_HOLD_SENDER
oCREATE_ACCOUNT
- Estrae il coinvolgimento dei conti sia dalle transazioni in uscita (
from_account_id
) che dalle transazioni in entrata (to_account_id
). - Utilizza
COALESCE
per 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 NULL
Origini 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'
KEY
non inizia con_obp2pc_
transaction_type
non èEXECUTE_HOLD_RECEIVER
,EXECUTE_HOLD_SENDER
oCREATE_ACCOUNT
- Estrae il coinvolgimento dei conti sia dalle transazioni in uscita (
from_account_id
) che dalle transazioni in entrata (to_account_id
). - Utilizza
COALESCE
per 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}_LINK
Scopo: 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'
KEY
non 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 = 1
Origini 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'
KEY
non 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 NULL
Scopo: 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_ranked
CTE: recupera il record di raccolta dati privato più recente peraccount_id
utilizzandoROW_NUMBER()
conORDER BY TXNTIMESTAMP DESC
.state_filtered
CTE: seleziona gli account (oaccount
) dalla tabella di stato.token_details
CTE: 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.key
Scopo: 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_ranked
CTE: recupera il record di raccolta dati privato più recente peraccount_id
utilizzandoROW_NUMBER()
conORDER BY TXNTIMESTAMP DESC
.state_filtered
CTE: seleziona gli account (oaccount
) dalla tabella di stato.token_details
CTE: 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_TABLE
per espandere l'arrayassociated_ft_accounts
in 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
: precedentementeassetType
OrgId
: precedentementeorg_id
UserId
: precedentementeuser_id
AssociatedFtAccounts
: precedentementeassociated_ft_accounts
AccountId
: precedentementeaccount_id
TokenId
: 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 dettaglioaccount
eotoken
.- 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 recordoaccountpdc
più 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 vociotoken
nella 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 ALL
per 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.yml
in 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 ALL
con 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>
KEY
contieneotransaction
(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
: precedentementeassetType
TransactionId
: precedentementetransaction_id
FromAccountId
: precedentementefrom_account_id
ToAccountId
: precedentementeto_account_id
TransactionType
: precedentementetransaction_type
Amount
: precedentementeamount
Category
: precedentementecategory
FromAccountBalance
: precedentementefrom_account_balance
ToAccountBalance
: 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_value
corretto 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'
KEY
non 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_value
daACCOUNTS_MOD
in base al fatto che la transazione coinvolga un valorefrom_account_id
oto_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
COALESCE
inblockNo
etxnNo
per 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_value
daACCOUNTS_MOD
, in base afrom_account_id
oto_account_id
. Applica la scala aamount
,from_account_balance
eto_account_balance
utilizzando: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:
COALESCE
viene applicato sublockNo
etxnNo
per 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 unUNION
di tre casi:APPROVE_BURN
- Iscriviti su
FROM_ACCOUNT_ID = B.ACCOUNT_ID
. - Assegnare
B.ORG_ID
sia aFROM_ORG_ID
che aTO_ORG_ID
.
- Iscriviti su
APPROVE_MINT
- Iscriviti su
TO_ACCOUNT_ID = C.ACCOUNT_ID
. - Assegnare
C.ORG_ID
sia aFROM_ORG_ID
che aTO_ORG_ID
.
- Iscriviti su
- Trasferimenti regolari
- Iscriviti su
FROM_ACCOUNT_ID = B.ACCOUNT_ID
eTO_ACCOUNT_ID = C.ACCOUNT_ID
. - Assegnare
B.ORG_ID
comeFROM_ORG_ID
eC.ORG_ID
comeTO_ORG_ID
.
- Iscriviti su
BLOCKNO DESC
per 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 aTO
per la masterizzazione).TO_ORG_ID
: ID organizzazione del conto del destinatario (o uguale aFROM
per mint).TRANSACTION_TYPE
: tipo di transazione (APPROVE_BURN
,APPROVE_MINT
o 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 DESC
Origini 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_ID
eORG_ID
.
Logica chiave: la vista utilizzaUNION
per 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_ID
eA.TO_ACCOUNT_ID IS NULL
. - Esclude il tipo di transazione
CREATE_ACCOUNT
. - Sia
FROM_ORG_ID
cheTO_ORG_ID
derivano 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_ID
eA.FROM_ACCOUNT_ID IS NULL
. - Sia
FROM_ORG_ID
cheTO_ORG_ID
derivano dall'organizzazione del destinatario (C.ORG_ID
).
- Condizione:
- Trasferimenti standard (transazioni con mittente e ricevente)
- Condizione:
A.FROM_ACCOUNT_ID = B.ACCOUNT_ID
eA.TO_ACCOUNT_ID = C.ACCOUNT_ID
. FROM_ORG_ID
proviene dall'organizzazione del mittente (B.ORG_ID
),TO_ORG_ID
dall'organizzazione del destinatario (C.ORG_ID
).
- Condizione:
BLOCKNO
per 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ò essereNULL
per mint).TO_ACCOUNT_ID
: ID del conto del destinatario (può essereNULL
per 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
).