Este tema describe referencias de campo ESQL.
[<] y [>] son signos válidos. Un ejemplo que utilice < y > se muestra en la figura siguiente.
La palabra clave LAST todavía está soportada a fines de compatibilidad con versiones anteriores, pero se ha dejado de utilizar. LAST no se puede usar como parte de una expresión de índice: [LAST] es válido y equivale a [<], pero [LAST3] no es válido.
Field [ > ] -- El primer elemento, equivalente a [ 1 ] Field [ > (a + b) * 2 ] Field [ < ] -- El último elemento, equivalente a [ LAST ] Field [ < 1 ] -- El último elemento, equivalente a [ LAST ] Field [ < 2 ] -- El penúltimo elemento Field [ < (a + b) / 3 ]
Una referencia de campo consta de un nombre de correlación, seguido de cero o más elementos de vía de acceso separados por puntos (.). El nombre de correlación identifica un punto inicial conocido en un árbol de mensajes. Por consiguiente, el punto inicial debe ser una variable de referencia declarada o uno de los puntos de inicio predefinido, por ejemplo, InputRoot. Los elementos de vía de acceso definen una vía de acceso desde el punto inicial al campo deseado.
InputRoot.XML.Data.Invoiceinicia el intermediario en la ubicación InputRoot (es decir, la raíz del mensaje de entrada en un nodo Compute) y, a continuación, realiza una secuencia de navegaciones. En primer lugar, navega desde el directorio raíz al primer campo XML dependiente y, a continuación al primer campo dependiente del campo XML Data. Finalmente, el intermediario navega hasta el primer campo dependiente del campo Data, Invoice. Siempre que esta referencia de campo se produzca en un programa ESQL, se accede al campo de factura.
InputRoot.XML."Customer Data".InvoiceSi tiene que hacer referencia a campos que contengan comillas, utilice dos pares de comillas alrededor de la referencia. Por ejemplo:
Body.Message."""hello"""
Algunos identificadores se reservan como palabras clave, pero puede utilizar comillas alrededor de estos identificadores para indicar que no se deben interpretar como palabras clave. Por ejemplo, SET es una palabra clave. Si tiene un mensaje que contiene un campo denominado SET al que desea hacer referencia, código Body."SET". Las palabras clave no son sensibles a las mayúsculas y minúsculas; por consiguiente, SET, Set y todas las demás combinaciones de letras mayúsculas y minúsculas se reconocen como palabras clave.
El elemento Item del mensaje Invoice es un ejemplo de esto. Item es una palabra clave reservada, por lo que, cuando haga referencia a este elemento, debe encerrarlo entre comillas. Por ejemplo:
InputBody.Invoice.Purchases."Item"[1].Author
InputRoot.XML."Customer Data".{'Customer-' || CurrentCustomer}.Invoiceen que las facturas están contenidas en una carpeta con un nombre formado al concatenar el literal de caracteres Customer- con el valor de CurrentCustomer (que debe ser una variable declarada de tipo carácter).
Si encierra cualquier serie entre comillas en ESQL, la convierte en un identificador; encerrar cualquier serie entre apóstrofos la convierte en un literal de caracteres. Debe encerrar todas las series de caracteres (CHARACTER, BLOB o BIT) entre apóstrofos.
El espacio de nombres se considera el único espacio de nombres de la vía de acceso de espacios de nombres que contiene este nombre. El único espacio de nombres de la vía de acceso es el espacio de nombres notarget.
Todos estos formatos existían antes de este cambio. Aunque su comportamiento ha cambiado en el sentido de que ahora comparan tanto el nombre como el espacio de nombres, las transformaciones existentes no deben ver ningún cambio en su comportamiento porque todas las transformaciones existentes crean sus elementos en el espacio de nombres notarget.
En todos los casos anteriores, un nombre o un espacio de nombres, suministrado por una expresión encerrada entre llaves ({}), es equivalente al nombre suministrado como identificador.
Por definición, el nombre del espacio de nombres notarget es la serie vacía. La serie vacía se puede seleccionar con expresiones que se evalúan en serie vacía, el identificador vacío "", o haciendo referencia a una constante de espacio de nombres definida como serie vacía.
El uso de referencias de campo suele implicar la búsqueda de un elemento existente. Esto es cierto para referencias de campo que sean los destinos de sentencias SET y los de cláusulas AS de sentencias SELECT. Si el elemento necesario no existe, se creará.
En ausencia de una especificación de tipo, el tipo del elemento no es Nombre ni ValorNombre, lo que efectivamente indica que el nuevo elemento carece de nombre
.Estos valores por omisión se pueden derivar de nombres de elemento, nombres de columna, o simplemente pueden ser nombres de secuencia generados. Si el nombre es un nombre de elemento, es efectivamente una copia de árbol y el nombre del espacio de nombres se copia como se ha indicado antes.
De lo contrario, el espacio de nombres del elemento recién creado se deriva buscando en la vía de acceso, es decir, el nombre se trata como la sintaxis de IDNombre de una referencia de campo.
InputRoot.XML.Data[1].Invoice InputRoot.XML.Data.Invoice[1]Esta construcción se utiliza con mayor frecuencia con una variable de índice, de manera que un bucle pasa por todos estos campos en secuencia. Por ejemplo:
WHILE count < 32 DO SET TOTAL = TOTAL + InputRoot.XML.Data.Invoice[count].Amount; END WHILE;Utilice esta clase de construcción con cuidado, porque implica que el intermediario debe contar los campos desde el principio cada vez que da la vuelta al bucle. Si la cuenta de repeticiones es larga, el rendimiento es mediocre. En estos casos, es una mejor alternativa el utilizar una variable de referencia de campo.
InputRoot.XML.Data.Invoice -- Selecciona el primero InputRoot.XML.Data.Invoice[1] -- Selecciona el primero InputRoot.XML.Data.Invoice[>] -- Selecciona el primero InputRoot.XML.Data.Invoice[>1] -- Selecciona el primero InputRoot.XML.Data.Invoice[>2] -- Selecciona el segundo InputRoot.XML.Data.Invoice[<] -- Selecciona el cuarto InputRoot.XML.Data.Invoice[<1] -- Selecciona el cuarto InputRoot.XML.Data.Invoice[<2] -- Selecciona el tercero InputRoot.XML.Data.Invoice[<3] -- Selecciona el segundoUna cláusula de índice también puede consistir en un par de corchetes vacío ( [] ). Esto selecciona todos los campos que tengan nombres coincidentes. Utilice esta construcción con funciones que esperan listas (por ejemplo, SELECT o CARDINALITY).
Cada elemento de una referencia de campo puede contener una cláusula de tipo. Se indican con paréntesis ( ( ) ) y aceptan cualquier expresión que devuelva un valor no nulo de tipo entero. La presencia de una expresión de tipo limita los campos seleccionados a aquéllos de tipo coincidente. Esta construcción se utiliza con mayor frecuencia con XML genérico, en que hay muchos tipos de elementos y es posible que un elemento XML contenga ambos atributos y elementos XML adicionales con el mismo nombre.
<Item Value = '1234' > <Value>5678</Value> </Item>Aquí, el elemento XML Item tiene dos elementos dependientes y ambos se denominan "Value". Los elementos dependientes se pueden distinguir mediante cláusulas de tipo: Item.(XML.Attribute)Value para seleccionar el atributo y Item.(XML.Element)Value para seleccionar el elemento.
Conceptos relacionados
ESQL
Tareas relacionadas
Desarrollo de ESQL
Acceso a varias apariciones conocidas de un elemento
Avisos |
Marcas registradas |
Descargas |
Biblioteca |
Soporte |
Información de retorno (feedback)
![]() ![]() |
ak04861_ |