Buscando información, he acabado en el RedBook
Cita:
El caso es que viene un ejemplo de función y da error al crearla.Stored Procedures, Triggers, and
User-Defined Functions on DB2
Universal Database for iSeries
Third Edition (October 2006)
This edition applies to V5R1, V5R2, and V5R3 of IBM OS/400 and V5R4 of IBM i5/OS, Program Number
5722-SS1.
User-Defined Functions on DB2
Universal Database for iSeries
Third Edition (October 2006)
This edition applies to V5R1, V5R2, and V5R3 of IBM OS/400 and V5R4 of IBM i5/OS, Program Number
5722-SS1.
Código SQL:
Ver original
CREATE FUNCTION DEC2DATE ( DATEDEC DECIMAL(8, 0) ) RETURNS DATE LANGUAGE SQL DETERMINISTIC CONTAINS SQL RETURNS NULL ON NULL INPUT NO EXTERNAL ACTION BEGIN DECLARE RESULT DATE ; DECLARE InvalidDate CONDITION FOR '22007'; DECLARE EXIT HANDLER FOR InvalidDate BEGIN RETURN CAST(NULL AS DATE); SIGNAL SQLSTATE '01HDI' SET MESSAGE_TEXT='Invalid date'; END; SET RESULT = DATE( SUBSTRING(DIGITS(DATEDEC),1,4) || '-' || SUBSTRING(DIGITS(DATEDEC),5,2) || '-' || SUBSTRING(DIGITS(DATEDEC),7,2)); RETURN RESULT; END ;
El mensaje de error es el siguiente
Cita:
El problema está en el SET, ya que lo he susituido por una asignación con SELECT INTO y sí funciona.Estado de SQL: 42601
Código de proveedor: -104
Mensaje: [SQL0104] Símbolo = no válido. Símbolos válidos: <IDENTIFIER>. Causa . . . . . : Se ha detectado un error de sintaxis en el símbolo =. El símbolo = no es un símbolo válido. Una lista parcial de símbolos válidos es <IDENTIFIER>. Esta lista presupone que la sentencia es correcta hasta el símbolo
Código de proveedor: -104
Mensaje: [SQL0104] Símbolo = no válido. Símbolos válidos: <IDENTIFIER>. Causa . . . . . : Se ha detectado un error de sintaxis en el símbolo =. El símbolo = no es un símbolo válido. Una lista parcial de símbolos válidos es <IDENTIFIER>. Esta lista presupone que la sentencia es correcta hasta el símbolo
Aparte de eso y usando mi versión modificada, quería ver el SQLSTATE devuelto en un error, para probarla he hecho desde el navigator un
select PRUEBA.DEC2DATE(20131410) FROM SYSIBM.SYSDUMMY1
pero no veo en ningún sitio el mensaje de error, simplemente devuelve el registro con un -, que imagino que es el NULL. ¿Cómo podría ver el mensaje de error?¿Existe alguna forma de probar directamente la función sin que forme parte de una select?
Saludos