La sentencia EGL add coloca un registro en un archivo, una cola de mensajes o una base de datos; o coloca un conjunto de registros en una base de datos.
A continuación se ofrece un ejemplo:
if (userRequest == "A") try add record1; onException myErrorHandler(12); end end
El comportamiento de la sentencia add depende del tipo de registro. Para obtener detalles acerca del proceso DL/I, consulte el tema Registro DLISegment. Para obtener detalles acerca del proceso SQL, consulte el tema Registro SQL.
La sentencia add genera una sentencia DL/I ISRT. En DL/I, esta inserción tiene lugar en la posición actual en la base de datos, sea cual sea. Puede controlar este posicionamiento, por ejemplo, estableciendo explícitamente las claves en el programa EGL (como se muestra en el ejemplo que figura más abajo), utilizando una sentencia set record position, utilizando una sentencia get o creando SSA calificados mediante la directiva #dli.
//crear instancias de los registros myCustomer CustomerRecord; myLocation LocationRecord; myOrder OrderRecord; //crear un argumento de búsqueda de segmento myCustomer.customerNo = "005001"; myLocation.locationNo = "000022"; //rellenar los campos del registro de pedido fillOrder(myOrder); //añadir el registro de pedido nuevo try add myOrder; onException myErrorHandler(2); endEsta sentencia add generará el siguiente código pseudo-DL/I:
ISRT STSCCST (STQCCNO = :myCustomer.customerNo) STSCLOC (STQCLNO = :myLocation.locationNo) STPCORDLos argumentos de búsqueda de segmento (SSA) calificados para el cliente y la ubicación identifican los segmentos padre del nuevo segmento de pedido. DL/I añadirá el nuevo segmento de pedido en una posición determinada por el campo keyItem de ese segmento, orderDateNo (STQCODN).
if (myOrder is unique) ... endLos posibles errores de tiempo de ejecución son los siguientes:
add myCustomer, myLocation, myOrder;EGL generará el siguiente código pseudo-DL/I a partir de esta sentencia:
ISRT STSCCST*D (STQCCNO = :myCust.customerNo) STSCLOC (STQCLNO = :myLocation.locationNo) STPCORD
Si añade un registro indexado, la clave del registro determina la posición lógica del registro en el archivo. La adición de un registro a una posición de archivo que ya se esté utilizando provoca un error grave de E/S UNIQUE o (si se permiten duplicaciones) el error leve de E/S DUPLICATE.
Al añadir un registro MQ, el registro se coloca al final de la cola. Esta colocación se produce debido a que la sentencia add invoca una o varias llamadas MQSeries:
Si añade un registro relativo, el elemento de clave especifica la posición del registro en el archivo. Sin embargo, la adición de un registro a una posición de archivo que ya se esté utilizando provoca un error grave de E/S UNIQUE.
Al añadir un registro serie, el registro se coloca al final del archivo.
Si el programa generado finaliza un registro serie y luego emite una sentencia get next para el mismo archivo, el programa cierra y vuelve a abrir el archivo antes de ejecutar la sentencia get next. Por tanto, una sentencia get next que sigue a una sentencia add lee el primer registro del archivo. Este comportamiento también se produce cuando las sentencias get next y add se encuentran en programas diferentes, y un programa llama al otro.
Es aconsejable evitar que el mismo archivo esté abierto en más de un programa simultáneamente.
En CICS para z/OS, un solo programa no puede incluir una combinación de las sentencias add y get next para el mismo archivo de spool. Esta restricción también se aplica cuando las sentencias add y get next se encuentran en programas diferentes, y un programa llama al otro. De forma parecida, una sentencia add a continuación de una sentencia get o get next añadirá un registro al principio del archivo.
Para BMP de IMS o z/OS por lotes, si añade un registro serie de longitud variable a un archivo asociado con GSAM y la longitud del registro es superior a la del archivo físico, DL/I devuelve un código de estado en blanco. Los datos se truncan pero no se emite ningún mensaje, ya que la situación no puede detectarse.
Para IMS/VS, debe asociar un registro serie con un PCB alternativo (un PCB TP del PSB). La cabecera del mensaje IMS (longitud, campo ZZ y código de transacción) se añade automáticamente a cada registro escrito en la cola de mensajes. Una sentencia EGL add para un registro serie asignado a una cola de mensajes da como resultado una llamada ISRT a la cola de mensajes. Si se produce un error y el registro se asigna a una cola de mensajes de varios segmentos y se asocia al PCB alterno expreso, los registros ya añadidos se comprometen, aunque no se haya producido una sentencia close explícita. Si es importante que estos registros no se comprometan, incluya un PCB alterno expreso adicional en el PSB y asocie el archivo al PCB alterno expreso adicional.
INSERT INTO nombre Tabla (columna01, ... columnaNN) values (:elementoRegistro01, ... :elementoRegistroNN)
try add employees; onException sysLib.rollback(); end
Conceptos relacionados
Soporte de bases de datos DL/I
Referencias a componentes
Tipos de registros y propiedades
Soporte de SQL
Tareas relacionadas
Diagrama de sintaxis para sentencias y mandatos EGL
Consulta relacionadaDirectiva #dli
Consideraciones relacionadas con CICS
close
delete
get
get next
get next inParent
get previous
Manejo de excepciones
execute
Valores de error de E/S
open
prepare
Sentencias EGL
replace
set
Propiedades de campo SQL