Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Error crear función DB2

Estas en el tema de Error crear función DB2 en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 19/07/2013, 05:57
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Error crear función DB2

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 original
  1. CREATE FUNCTION DEC2DATE (
  2. DATEDEC DECIMAL(8, 0) )
  3. RETURNS DATE
  4. LANGUAGE SQL
  5. DETERMINISTIC
  6. CONTAINS SQL
  7. RETURNS NULL ON NULL INPUT
  8. NO EXTERNAL ACTION
  9. BEGIN
  10. DECLARE RESULT DATE ;
  11. DECLARE InvalidDate CONDITION FOR '22007';
  12. DECLARE EXIT HANDLER FOR InvalidDate
  13. BEGIN
  14. RETURN CAST(NULL AS DATE);
  15. SIGNAL SQLSTATE '01HDI' SET MESSAGE_TEXT='Invalid date';
  16. END;
  17. SET RESULT = DATE(
  18. SUBSTRING(DIGITS(DATEDEC),1,4) || '-' ||
  19. SUBSTRING(DIGITS(DATEDEC),5,2) || '-' ||
  20. SUBSTRING(DIGITS(DATEDEC),7,2));
  21. RETURN RESULT;
  22. 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
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Última edición por gnzsoloyo; 19/07/2013 a las 06:49 Razón: Mal etiquetado
  #2 (permalink)  
Antiguo 25/07/2013, 23:21
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 21 años, 4 meses
Puntos: 37
Respuesta: Error crear función DB2

Respecto de "Existe alguna forma de probar directamente la función sin que forme parte de una select".

Si hablas de DB2 y tienes Client Access o iSerles Access que son programitas cliente para ingresar al entorno NO GRAFICO del iseries instalado en tu computadora para conectarte a la IP del iSeries, inicias una sesion (el encargado del iSeries te tiene que dar un usuario y pwd) y con el comando "strSql" entras al entorno de Sql sonde puedes probar a ver si funca (aunque yo no he creado UDF's solo Stored Procedures)

Etiquetas: db2, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:38.