Estoy tratando de crear una UDF en un AS/400 iSeries v7R1.
Buscando información, he acabado en el RedBook
Cita: 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.
El caso es que viene un ejemplo de función y da error al crearla.
Código SQL:
Ver originalCREATE 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: 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
El problema está en el SET, ya que lo he susituido por una asignación con SELECT INTO y sí funciona.
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