Vistas predefinidas
Oracle Blockchain Platform Digital Assets Edition proporciona las siguientes vistas de base de datos predefinidas.
-
ACCOUNT_TRANSACTION_VIEW
- Esta vista proporciona un historial de transacciones unificado por cuenta, que captura los lados de débito (
from_account_id
) y crédito (to_account_id
) de una transacción. Puede utilizar esta vista para consultar todas las transacciones vinculadas a una cuenta sin escanear datos de estado de código de cadena sin procesar. - Consulta SQL confidencial, propietario 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
Orígenes de datos:
<obpInstanceName>_<channelName>_state
, la tabla de estado principal que contiene datos de código de cadena en formato JSONLógica clave:- Incluye solo las filas en las que las siguientes afirmaciones son verdaderas.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
KEY
no empieza por_obp2pc_
transaction_type
no esEXECUTE_HOLD_RECEIVER
,EXECUTE_HOLD_SENDER
niCREATE_ACCOUNT
- Extrae la participación de la cuenta tanto de las transacciones salientes (
from_account_id
) como de las transacciones entrantes (to_account_id
). - Utiliza
COALESCE
para garantizar un orden consistente de las columnas (ORDER_BLOCKNO
,ORDER_TXNNO
) incluso si faltan valores JSON. - Combina tanto las transacciones salientes como las entrantes con
UNION ALL
.
Columnas de Salida:KEY
: ID de cuenta asociado a la transacción (emisor o receptor).TRANSACTION_ID
: identificador único de la transacción.TRANSACTION_DETAILS
: objeto JSON completo de la transacción.ORDER_BLOCKNO
: número de bloque utilizado para ordenar (de JSON si está disponible, de lo contrario, los metadatos de bloque).ORDER_TXNNO
: número de transacción en el bloque (de JSON si está disponible, de lo contrario, los metadatos del bloque).
- Incluye solo las filas en las que las siguientes afirmaciones son verdaderas.
- Datos SourcesConfidential Consulta SQL, banco participante:
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
Orígenes de datos:
<obpInstanceName>_<channelName>_state
, la tabla de estado principal que contiene datos de código de cadena en formato JSONLógica clave:- Incluye solo las filas en las que las siguientes afirmaciones son verdaderas.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
KEY
no empieza por_obp2pc_
transaction_type
no esEXECUTE_HOLD_RECEIVER
,EXECUTE_HOLD_SENDER
niCREATE_ACCOUNT
- Extrae la participación de la cuenta tanto de las transacciones salientes (
from_account_id
) como de las transacciones entrantes (to_account_id
). - Utiliza
COALESCE
para garantizar un orden consistente de las columnas (ORDER_BLOCKNO
,ORDER_TXNNO
) incluso si faltan valores JSON. - Combina tanto las transacciones salientes como las entrantes con
UNION ALL
.
Columnas de Salida:KEY
: ID de cuenta asociado a la transacción (emisor o receptor).TRANSACTION_ID
: identificador único de la transacción.TRANSACTION_DETAILS
: objeto JSON completo de la transacción.ORDER_BLOCKNO
: número de bloque utilizado para ordenar (de JSON si está disponible, de lo contrario, los metadatos de bloque).ORDER_TXNNO
: número de transacción en el bloque (de JSON si está disponible, de lo contrario, los metadatos del bloque).
- Incluye solo las filas en las que las siguientes afirmaciones son verdaderas.
-
TRANSACTION_PDC_VIEW
- Esta vista proporciona detalles de importe y saldo a nivel de transacción de la recopilación de datos privados. Garantiza que solo se recupere el último registro por transacción.
- Consulta SQL confidencial, propietario 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
Objetivo: agrega datos en toda la organización a través de enlaces de base de datos.
Orígenes de datos:<obpInstanceName>_<channelName>_hist
: tabla de datos de código de cadena histórico que contiene registros de recopilación de datos privados$TRANSACTION_PDC_VIEW@${org1Name}_LINK
: vista remota desde la organización 1 a la que se accede a través del enlace de base de datos.$TRANSACTION_PDC_VIEW@${org2Name}_LINK
: vista remota desde la organización 2 a la que se accede a través del enlace de base de datos.
Lógica clave:- Filtra solo los registros en los que las siguientes afirmaciones son verdaderas.
CHAINCODEID = ${implicitPDCName}
assetType = 'otransactionpdc'
KEY
no empieza por_obp2pc_staged_.
- Utiliza la función de ventana
ROW_NUMBER()
.- Particiones por
transaction_id
. - Pedidos a más tardar
TXNTIMESTAMP DESC
. - Mantiene solo el último registro
(rn = 1)
.
- Particiones por
- Combina datos de la tabla de historial de recopilación de datos privada local, la vista de recopilación de datos privada de la organización 1 (mediante enlace de base de datos) y la vista de recopilación de datos privada de la organización 2 (mediante enlace de base de datos).
Columnas de Salida:TRANSACTION_ID
: identificador único de la transacción.CHAINCODEID
: identificador del código de cadena asociado al registro de cheque posdatado.QUANTITY
: importe o cantidad de la transacción transferida.FROM_ACCOUNT_BALANCE
: saldo de la cuenta del remitente después de la transacción.FROM_ACCOUNT_ONHOLD_BALANCE
: saldo retenido de la cuenta del remitente después de la transacción.TO_ACCOUNT_BALANCE
: saldo de la cuenta del receptor después de la transacción.TO_ACCOUNT_ONHOLD_BALANCE
: saldo retenido de la cuenta del receptor después de la transacción.
- Consulta SQL confidencial, banco de participantes:
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
Orígenes de datos:<obpInstanceName>_<channelName>_hist
: tabla de datos de código de cadena histórico que contiene registros de recopilación de datos privados
Lógica clave:- Filtra solo los registros en los que las siguientes afirmaciones son verdaderas.
CHAINCODEID = ${implicitPDCName}
assetType = 'otransactionpdc'
KEY
no empieza por_obp2pc_staged_.
- Utiliza la función de ventana
ROW_NUMBER()
.- Particiones por
transaction_id
. - Pedidos a más tardar
TXNTIMESTAMP DESC
. - Mantiene solo el último registro
(rn = 1)
.
- Particiones por
Columnas de Salida:TRANSACTION_ID
: identificador único de la transacción.CHAINCODEID
: identificador del código de cadena asociado al registro de cheque posdatado.QUANTITY
: importe o cantidad de la transacción transferida.FROM_ACCOUNT_BALANCE
: saldo de la cuenta del remitente después de la transacción.FROM_ACCOUNT_ONHOLD_BALANCE
: saldo retenido de la cuenta del remitente después de la transacción.TO_ACCOUNT_BALANCE
: saldo de la cuenta del receptor después de la transacción.TO_ACCOUNT_ONHOLD_BALANCE
: saldo retenido de la cuenta del receptor después de la transacción.
-
ACCOUNTS_VIEW
- Esta vista proporciona una vista consolidada de las cuentas en todas las organizaciones.
- Consulta SQL confidencial, propietario 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
Objetivo: Esta vista proporciona una vista consolidada de las cuentas en todas las organizaciones, combinando la siguiente información.- Estado de cuenta corriente
- Últimos datos privados relacionados con la cuenta (recopilación de datos privados)
- Metadatos de token como la precisión decimal
- Detalles de cuenta entre organizaciones mediante enlaces de base de datos
Orígenes de datos:<obpInstanceName>_<channelName>_hist
: datos históricos de código de cadena, que se utilizan para recuperar la entrada de recopilación de datos privados de la cuenta más reciente (oaccountpdc
).<obpInstanceName>_<channelName>_state
: datos del estado actual de las cuentas (oaccount
) y tokens (otoken
).ACCOUNTS_VIEW@<org1Name>_LINK
: vista remota desde la organización 1.ACCOUNTS_VIEW@<org2Name>_LINK
: vista remota desde la organización 2.
Lógica clave:hist_ranked
CTE: obtiene el último registro de recopilación de datos privados poraccount_id
medianteROW_NUMBER()
conORDER BY TXNTIMESTAMP DESC
.state_filtered
CTE: selecciona cuentas (oaccount
) de la tabla de estados.token_details
CTE: recupera los detalles del token (otoken
) con precisión decimal (valor por defecto0
si falta).- Uniones de selección final: estado de cuenta (
state_filtered
) con los últimos detalles de recopilación de datos privados (hist_ranked
) y metadatos de token (token_details
). - Garantiza solo cuentas con recopilación de datos privados asociados (
WHERE h.valuejson IS NOT NULL
). - Amplía los datos de cuenta con sindicatos de enlaces de base de datos de otras organizaciones.
Columnas de Salida:ACCOUNT_ID
: identificador único de la cuenta.ORG_ID
: ID de organización asociado a la cuenta.USER_ID
: ID de usuario enlazado a la cuenta (de la recopilación de datos privados).CUSTOM_ACCOUNT_ID
: identificador de cuenta definido por el usuario personalizado.TOKEN_ID
: identificador de token asociado a la cuenta.DECIMAL_VALUE
: precisión decimal de token (el valor por defecto es 0 si falta).
- Consulta SQL confidencial, banco de participantes:
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
Objetivo: Esta vista proporciona una vista consolidada de las cuentas en todas las organizaciones, combinando la siguiente información.- Estado de cuenta corriente
- Últimos datos privados relacionados con la cuenta (recopilación de datos privados)
- Metadatos de token como la precisión decimal
Orígenes de datos:<obpInstanceName>_<channelName>_hist
: datos históricos de código de cadena, que se utilizan para recuperar la entrada de recopilación de datos privados de la cuenta más reciente (oaccountpdc
).<obpInstanceName>_<channelName>_state
: datos del estado actual de las cuentas (oaccount
) y tokens (otoken
).
Lógica clave:hist_ranked
CTE: obtiene el último registro de recopilación de datos privados poraccount_id
medianteROW_NUMBER()
conORDER BY TXNTIMESTAMP DESC
.state_filtered
CTE: selecciona cuentas (oaccount
) de la tabla de estados.token_details
CTE: recupera los detalles del token (otoken
) con precisión decimal (valor por defecto0
si falta).- Uniones de selección final: estado de cuenta (
state_filtered
) con los últimos detalles de recopilación de datos privados (hist_ranked
) y metadatos de token (token_details
). - Garantiza solo cuentas con recopilación de datos privados asociados (
WHERE h.valuejson IS NOT NULL
).
Columnas de Salida:ACCOUNT_ID
: identificador único de la cuenta.ORG_ID
: ID de organización asociado a la cuenta.USER_ID
: ID de usuario enlazado a la cuenta (de la recopilación de datos privados).CUSTOM_ACCOUNT_ID
: identificador de cuenta definido por el usuario personalizado.TOKEN_ID
: identificador de token asociado a la cuenta.DECIMAL_VALUE
: precisión decimal de token (el valor por defecto es 0 si falta).
-
ACCOUNTS_MOD
- Esta vista proporciona una representación estructurada de los datos de registro de tokens fungibles, asignando organizaciones y usuarios a sus cuentas y tokens fungibles asociados. Simplifica el acceso a las relaciones de token de cuenta almacenadas en el estado de código de cadena simplificando las matrices JSON anidadas, lo que facilita el consumo de las aplicaciones y las consultas de análisis.
- Consulta SQL Genérica, 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`
Orígenes de datos:<obpInstanceName>_<channelName>_state
: tabla de estado principal que contiene datos de código de cadena en formato JSON.
Lógica clave:- Filtrar por clave de registro: incluye solo registros en los que la clave contiene
oftregistry
. - Filtrar por código de cadena: restringe los resultados al código de cadena especificado (
<chaincodeName>
). - Simplificar JSON anidado: utiliza
JSON_TABLE
para ampliar la matrizassociated_ft_accounts
en filas independientes para cada par de token de cuenta.account_id
: identificador de cuenta de token fungible.token_id
: token enlazado a la cuenta.lng_number
: ordinalidad (utilizada internamente para realizar un seguimiento del orden de la matriz).
- Ordenación: los resultados se ordenan por número de bloque (
blockno
) y número de transacción (txnno
) en orden descendente, lo que garantiza que las asociaciones más recientes se muestren primero.
Columnas de Salida:BLOCKNO
: número de bloque en el que se registró la actualización del registro.TXNNO
: número de transacción en el bloque.KEY
: clave de estado que representa la entrada de registro de token fungible.ASSETTYPE
: tipo de activo (esperado:oftregistry
).ORG_ID
: identificador de organización del JSON.USER_ID
: identificador de usuario asociado al registro de registro.ACCOUNT_ID
: ID de cuenta de token fungible extraído de la matriz anidada.TOKEN_ID
: ID de token extraído enlazado a la cuenta de token fungible.
- Consulta SQL Genérica, Ir:
`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`
Esta vista es la misma que la consulta SQL genérica, vista TypeScript. La única diferencia está en la convención de nomenclatura de campos JSON, que utiliza mayúsculas y minúsculas en Pascal en lugar de minúsculas.AssetType
: anteriormenteassetType
OrgId
: anteriormenteorg_id
UserId
: anteriormenteuser_id
AssociatedFtAccounts
: anteriormenteassociated_ft_accounts
AccountId
: anteriormenteaccount_id
TokenId
: anteriormentetoken_id
OrgId AS org_id
) para mantener los nombres de columna de salida consistentes en todas las vistas. - Consulta SQL confidencial, propietario 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;
Orígenes de datos:<obpInstanceName>_<channelName>_hist
: tabla de historial que almacena los cambios cronológicos de los datos privados de la cuenta (oaccountpdc
).<obpInstanceName>_<channelName>_state
: tabla de estado que contiene el estado del código de cadena actual en formato JSON, que se utiliza para los detallesoaccount
yotoken
.- Vistas de organización remota: se incluyen datos adicionales de las vistas ACCOUNTS_MOD en otras organizaciones mediante enlaces de base de datos:
"ACCOUNTS_MOD"@<org1Name>_LINK
"ACCOUNTS_MOD"@<org2Name>_LINK
"ACCOUNTS_MOD"@<org3Name>_LINK
Lógica clave:- Clasificar registros históricos: utiliza
ROW_NUMBER()
para seleccionar el último registrooaccountpdc
para cada ID de cuenta de la tabla de historial. - Filtrar cuentas actuales: recupera solo los registros con
assetType = 'oaccount'
de la tabla de estado. - Metadatos de token de unión: agrega precisión de token (
decimal_value
) mediante la unión con entradasotoken
en la tabla de estado. - Combinar detalles de cuenta: une registros de cuenta filtrados con su entrada de historial más reciente y detalles de token. Garantiza que solo se incluyan las cuentas con datos históricos válidos (
h.valuejson IS NOT NULL
). - Unión de varias organizaciones: utiliza
UNION ALL
para fusionar los datos de la cuenta de la organización local con varias organizaciones remotas mediante enlaces de base de datos. Esto permite que una sola consulta unificada recupere todas las cuentas de la red.
Columnas de Salida:ACCOUNT_ID
: identificador único de la cuenta.ORG_ID
: ID de organización propietaria de la cuenta.USER_ID
: ID de usuario enlazado a la cuenta (del último registro histórico).CUSTOM_ACCOUNT_ID
: identificador de cuenta personalizado opcional definido por el usuario.TOKEN_ID
: identificador de token asociado a la cuenta.DECIMAL_VALUE
: precisión decimal de token (el valor por defecto es 0 si falta).
Generación dinámica: la parte multiorganización no está codificada. En el script, las uniones adicionales se generan dinámicamente en función del archivo
Participant_orgs_list.yml
. Esto garantiza que la vista se adapte automáticamente en función de cuántas organizaciones estén configuradas en la red. La consulta de ejemplo muestra tres organizaciones para mayor claridad, pero en la práctica el número de uniones depende del tamaño deorgsList
. Para obtener más información, consulte la información anterior sobre el archivoParticipant_orgs_list.yml
en este tema. - Consulta SQL confidencial, banco de participantes:
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;
Esta vista es la misma que la Consulta SQL Confidencial, Propietario del Sistema, pero solo recupera datos para la organización local. Las principales diferencias son las siguientes:- No se utiliza
UNION ALL
con enlaces de base de datos. - La salida incluye cuentas sólo de las tablas de estado e historial de la organización actual.
- La vista proporciona un registro de cuentas de una sola organización, a diferencia de la variante de varias organizaciones que consolida las cuentas en varias organizaciones.
- No se utiliza
-
TRANSACTION_MOD
- Esta vista proporciona un registro detallado de todas las transacciones de cadena de bloques, capturando metadatos, participantes, importes y saldos resultantes. Simplifica el acceso al historial de transacciones mediante la extracción de campos estructurados directamente de la tabla de historial, lo que elimina la necesidad de analizar manualmente el JSON no procesado.
- Consulta SQL Genérica, 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`
Orígenes de datos:
<obpInstanceName>_<channelName>_hist
, la tabla de historial que contiene todos los eventos de transacción en formato JSON. Incluye tanto los detalles de la transacción como los metadatos asociados (bloque, número de transacción, registro de hora).Lógica clave:- Incluye solo las filas en las que las siguientes afirmaciones son verdaderas.
CHAINCODEID = <chaincodeName>
KEY
contieneotransaction
(filtros para registros relacionados con transacciones)
- Las indicaciones dan como resultado lo siguiente.
blockno DESC
(el último bloque primero)txnno DESC
(la última transacción dentro del bloque primero)
Columnas de Salida:BLOCKNO
: número de bloque en el que se registró la transacción.TXNNO
: número de transacción en el bloque.KEY
: identificador único de la entrada de transacción.TXNTIMESTAMP
: registro de hora cuando se completó la transacción.ASSETTYPE
: tipo de activo para la transacción (por ejemplo,otransaction
).TRANSACTION_ID
: identificador único de la transacción.FROM_ACCOUNT_ID
: ID de cuenta de la que se originó el activo/valor.TO_ACCOUNT_ID
: ID de cuenta al que se ha transferido el activo/valor.TRANSACTION_TYPE
: tipo de transacción (por ejemplo, transferencia, débito, crédito).AMOUNT
: importe implicado en la transacción.TRANSACTION_EARMARK
: categoría o marcador de la transacción.FROM_ACCOUNT_BALANCE
: saldo de la cuenta de origen después de la transacción.TO_ACCOUNT_BALANCE
: saldo de la cuenta de destino después de la transacción.
- Incluye solo las filas en las que las siguientes afirmaciones son verdaderas.
- Consulta SQL Genérica, Ir:
`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`
Esta vista es la misma que la consulta SQL genérica, vista TypeScript. La única diferencia está en la convención de nomenclatura de campos JSON, que utiliza mayúsculas y minúsculas en Pascal en lugar de minúsculas.AssetType
: anteriormenteassetType
TransactionId
: anteriormentetransaction_id
FromAccountId
: anteriormentefrom_account_id
ToAccountId
: anteriormenteto_account_id
TransactionType
: anteriormentetransaction_type
Amount
: anteriormenteamount
Category
: anteriormentecategory
FromAccountBalance
: anteriormentefrom_account_balance
ToAccountBalance
: anteriormenteto_account_balance
TransactionId AS transaction_id
) para mantener los nombres de columna de salida consistentes en todas las vistas, independientemente de la convención de nomenclatura de campos JSON. - Consulta SQL confidencial, propietario 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`
Orígenes de datos:<obpInstanceName>_<channelName>_hist
: tabla de código de cadena histórica que almacena todas las versiones de transacción.<transactionPDCViewName>
: vista que contiene los detalles de la transacción de recopilación de datos privada, unida para enriquecer los registros de transacción.ACCOUNTS_MOD
: vista de referencia utilizada para recuperar el valordecimal_value
correcto para los saldos de cuenta y los importes de transacción.
Lógica clave:- Filtra solo las filas en las que las siguientes afirmaciones son verdaderas.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
KEY
no empieza por_obp2pc_staged_
- Utiliza
ROW_NUMBER()
particionado portransaction_id
(ordenado portxntimestamp DESC
) para garantizar que solo se incluya el último registro por transacción. - Recupera dinámicamente
decimal_value
deACCOUNTS_MOD
, en función de si la transacción implicafrom_account_id
oto_account_id
. - Los importes y saldos (
amount
,from_account_balance
,to_account_balance
) se escalan con precisión decimal mediante:value / POWER(10, decimal_value)
- Utiliza
COALESCE
enblockNo
ytxnNo
para garantizar que las columnas de ordenación siempre estén presentes, incluso si faltan en JSON.
Columnas de Salida:BLOCKNO
: número de bloque para ordenar (de JSON si está disponible, de lo contrario de los metadatos).TXNNO
: número de transacción en el bloque (de JSON si está disponible; de lo contrario, de los metadatos).KEY
: identificador de clave de transacción.TXNTIMESTAMP
: registro de hora de la transacción.ASSETTYPE
: tipo de activo (otransaction
).TRANSACTION_ID
: identificador único de la transacción.FROM_ACCOUNT_ID
: ID de cuenta desde el que se enviaron los tokens.TO_ACCOUNT_ID
: ID de cuenta al que se enviaron los tokens.TRANSACTION_TYPE
: tipo de transacción (por ejemplo, transferencia, retención, liberación).AMOUNT
: importe de transacción, escalado por precisión decimal de token.TRANSACTION_EARMARK
: categoría u objeto de la transacción.FROM_ACCOUNT_BALANCE
: saldo de la cuenta del remitente después de la transacción, escalado por precisión.TO_ACCOUNT_BALANCE
: saldo de la cuenta del receptor después de la transacción, escalado por precisión.
- Consulta SQL confidencial, banco de participantes:
`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`
Orígenes de datos:<obpInstanceName>_<channelName>_hist
: tabla de código de cadena histórico que contiene todas las versiones de transacción en formato JSON.<transactionPDCViewName>
: vista de recopilación de datos privada que contiene datos privados a nivel de transacción. Se une al historial para enriquecer el registro de transacción.ACCOUNTS_MOD
: vista utilizada para recuperar la precisión decimal de token correcta (decimal_value
) para las cuentas implicadas en transacciones.
Lógica clave:- Filtra solo las filas en las que las siguientes afirmaciones son verdaderas.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
- Excluye las transacciones en ubicación temporal (
KEY NOT LIKE '_obp2pc_staged_%'
)
- Escala decimal: recupera
decimal_value
de forma dinámica desdeACCOUNTS_MOD
, segúnfrom_account_id
oto_account_id
. Aplica la escala aamount
,from_account_balance
yto_account_balance
mediante:value / POWER(10, decimal_value)
- Selección de registros: utiliza
ROW_NUMBER()
particionado portransaction_id
(el último porTXNTIMESTAMP
) para asegurarse de que solo se devuelve la última versión de cada transacción. - Normalización de datos:
COALESCE
se aplica enblockNo
ytxnNo
para garantizar la coherencia incluso si faltan los valores en la carga útil de JSON.
Columnas de Salida:BLOCKNO
: número de bloque utilizado para ordenar (de JSON si está disponible, de lo contrario de los metadatos).TXNNO
: número de transacción en el bloque (de JSON si está disponible; de lo contrario, de los metadatos).KEY
: identificador de clave de transacción.TXNTIMESTAMP
: registro de hora de la transacción.ASSETTYPE
: tipo de activo (otransaction
).TRANSACTION_ID
: identificador único de la transacción.FROM_ACCOUNT_ID
: ID de cuenta que envía tokens.TO_ACCOUNT_ID
: ID de cuenta que recibe tokens.TRANSACTION_TYPE
: tipo de transacción (por ejemplo, transferencia, retención, liberación).AMOUNT
: importe de transacción, normalizado con precisión decimal de token.TRANSACTION_EARMARK
: categoría o marcador de la transacción.FROM_ACCOUNT_BALANCE
: saldo de la cuenta de emisor después de la transacción (ajustado por precisión).TO_ACCOUNT_BALANCE
: saldo de la cuenta del receptor después de la transacción (ajustado por precisión).
-
ACCOUNTS_TRANSACTION_MOD
- Esta vista amplía el historial de transacciones mediante la asociación de cada transacción con los IDs de organización de las cuentas participantes. Admite aprobaciones de consumo, aprobaciones de menta y transferencias regulares, lo que garantiza que las transacciones incluyan tanto el contexto de nivel de cuenta como el de organización.
- Consulta SQL Genérica, TypeScript e Ir:
`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`
Orígenes de datos:<transactionViewName> (A)
: proporciona detalles básicos de la transacción, como ID, números de bloque, cuentas, importes y registros de hora.<accountsViewName> (B, C)
: asigna cuentas (ACCOUNT_ID
) a organizaciones (ORG_ID
) tanto para el remitente como para el receptor.
Lógica clave: la vista se crea mediante unUNION
de tres casos:APPROVE_BURN
- Únase a
FROM_ACCOUNT_ID = B.ACCOUNT_ID
. - Asigne
B.ORG_ID
aFROM_ORG_ID
yTO_ORG_ID
.
- Únase a
APPROVE_MINT
- Únase a
TO_ACCOUNT_ID = C.ACCOUNT_ID
. - Asigne
C.ORG_ID
aFROM_ORG_ID
yTO_ORG_ID
.
- Únase a
- Transferencias regulares
- Únase a
FROM_ACCOUNT_ID = B.ACCOUNT_ID
yTO_ACCOUNT_ID = C.ACCOUNT_ID
. - Asigne
B.ORG_ID
comoFROM_ORG_ID
yC.ORG_ID
comoTO_ORG_ID
.
- Únase a
BLOCKNO DESC
para priorizar las últimas transacciones.Columnas de Salida:TRANSACTION_ID
: identificador único de la transacción.BLOCKNO
: número de bloque en el que se registró la transacción.FROM_ACCOUNT_ID
: ID de cuenta del remitente.TO_ACCOUNT_ID
: ID de cuenta del receptor.EARMARK
: categoría de referencia de transacción (aliasTRANSACTION_EARMARK
).FROM_ORG_ID
: ID de organización de la cuenta del remitente (o igual queTO
para grabación).TO_ORG_ID
: ID de organización de la cuenta del receptor (o igual queFROM
para la moneda).TRANSACTION_TYPE
: tipo de transacción (APPROVE_BURN
,APPROVE_MINT
o transferencia).AMOUNT
: importe de la transacción.CRDATE
: fecha de creación de la transacción (desdeTXNTIMESTAMP
).
- Consulta SQL confidencial, propietario del sistema y banco de participantes:
`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
Orígenes de datos:<transactionViewName> (A)
: proporciona datos de nivel de transacción (ID, números de bloque, referencias de cuenta, importes, registros de hora).<accountsViewName> (B, C)
: proporciona una asignación entreACCOUNT_ID
yORG_ID
.
Lógica clave: la vista utilizaUNION
para fusionar los resultados de tres patrones de transacción:- Transacciones de solo remitente (por ejemplo, casos salientes o similares a los de consumo)
- Condición:
A.FROM_ACCOUNT_ID = B.ACCOUNT_ID
yA.TO_ACCOUNT_ID IS NULL
. - Excluye el tipo de transacción
CREATE_ACCOUNT
. - Tanto
FROM_ORG_ID
comoTO_ORG_ID
se derivan de la organización del remitente (B.ORG_ID
).
- Condición:
- Transacciones de solo receptor (por ejemplo, casos entrantes o similares a menta)
- Condición:
A.TO_ACCOUNT_ID = C.ACCOUNT_ID
yA.FROM_ACCOUNT_ID IS NULL
. - Tanto
FROM_ORG_ID
comoTO_ORG_ID
proceden de la organización del receptor (C.ORG_ID
).
- Condición:
- Transferencias estándar (transacciones con remitente y receptor)
- Condición:
A.FROM_ACCOUNT_ID = B.ACCOUNT_ID
yA.TO_ACCOUNT_ID = C.ACCOUNT_ID
. FROM_ORG_ID
procede de la organización del remitente (B.ORG_ID
),TO_ORG_ID
de la organización del destinatario (C.ORG_ID
).
- Condición:
BLOCKNO
para priorizar las últimas transacciones.Columnas de Salida:TRANSACTION_ID
: identificador único de la transacción.BLOCKNO
: número de bloque en el que se registra la transacción.FROM_ACCOUNT_ID
: ID de cuenta del remitente (puede serNULL
para la menta).TO_ACCOUNT_ID
: ID de cuenta del receptor (puede serNULL
para grabación).EARMARK
: referencia de transacción (aliasTRANSACTION_EARMARK
).FROM_ORG_ID
: ID de organización del remitente (o igual que el receptor si el remitente esNULL
).TO_ORG_ID
: ID de organización del receptor (o el mismo que el emisor si el receptor esNULL
).TRANSACTION_TYPE
: tipo de transacción (por ejemplo, transferencia, menta, grabación, etc.).AMOUNT
: importe de la transacción.CRDATE
: registro de hora de creación de transacción (TXNTIMESTAMP
).