Si una sentencia SELECT no devuelve datos o datos adicionales, esta situación se maneja de forma normal y no se establece ningún código de error en SQLCODE. Esto se produce independientemente del valor de las propiedades Generar excepción cuando se produce un error de la base de datos y Tratar los avisos como errores en el nodo actual.
Para reconocer que una sentencia SELECT no ha devuelto datos, incluya ESQL que compruebe qué se ha devuelto. Puede realizar esta tarea de varios modos:
Devuelve un valor booleano que indica si una función SELECT ha devuelto uno o más valores (TRUE) o ninguno (FALSE).
IF EXISTS(SELECT T.MYCOL FROM Database.MYTABLE) THEN ...
Si espera una matriz en respuesta a una sentencia SELECT, puede utilizar CARDINALITY para calcular cuántas entradas se han recibido.
SET OutputRoot.XML.Testcase.Results[] = ( SELECT T.MYCOL FROM Database.MYTABLE) ...... IF CARDINALITY (OutputRoot.XML.Testcase.Results[]) > 0 THEN ........
Si ha utilizado la palabra clave THE o ITEM en la sentencia SELECT, se devuelve un valor escalar. Si no se han devuelto filas, el valor se establece en NULL. Sin embargo, es posible que el valor NULL esté contenido en la columna y es aconsejable distinguir estos dos casos.
Para ello incluya COALESCE en la sentencia SELECT, por ejemplo:
SET OutputRoot.XML.Testcase.Results VALUE = THE ( SELECT ITEM COALESCE(T.MYCOL, 'WAS NULL') FROM Database.MYTABLE);
Si se devuelve la serie de caracteres WAS NULL, esto indica que la columna contenía NULL y que no se ha devuelto ninguna fila.
En releases anteriores, se establecía un SQLCODE de 100 en la mayoría de los casos si no se devolvían datos o no se devolvían datos adicionales. El intermediario generaba una excepción si se elegía manejar los errores de base de datos del flujo de mensajes.