Hi.
I trying create a function in DB2 V5.4.

This is the function...
Code:
SET PATH='DB2DTAMART';
SET SCHEMA='DB2DTAMART';

 CREATE FUNCTION fx_f76a09_DIVJ  ( FECHA_desde date,  FECHA_hasta date)
     RETURNS TABLE ( 
		 Documento			CHAR(2) 			--1
		,fecha				NUMERIC(6,0)
		,Compania			CHAR(5)
		,Centro_Emisor		CHAR(4)
		,Descripcion		CHAR(25)
		,Grupo_Facturas		CHAR(1)
		,Numero				CHAR(8)
		,nroAnterior		CHAR(8)
		,FechaAnterior		NUMERIC(6,0)
		,nroSiguiente		CHAR(8)
		,FechaSiguiente		NUMERIC(6,0)
		)

     LANGUAGE SQL
     MODIFIES SQL DATA
     NO EXTERNAL ACTION
     DETERMINISTIC
	 
BEGIN ATOMIC


    declare FECHA_JUL_desde numeric(6,0);
	declare FECHA_JUL_hasta numeric(6,0);
	
	set FECHA_JUL_desde = ((year( FECHA_desde  ) - 1900)*1000) + ( dayofyear(FECHA_desde));
	set FECHA_JUL_hasta = ((year( FECHA_hasta  ) - 1900)*1000) + ( dayofyear(FECHA_hasta));


	
DECLARE GLOBAL TEMPORARY TABLE f76a09_tmp 
(
				ttDCT CHAR(2),
				ttDIVJ NUMERIC(6,0),
				ttKCO CHAR(5),
				ttVINV CHAR(25)
)  ON COMMIT DELETE ROWS 
WITH REPLACE;

-----------------------------------------------------------------------------
---------------------- Llenamos la tabla temporal
insert into QTEMP.f76a09_tmp 
select 
				ttDCT,
				ttDIVJ,
				ttKCO,
				ttVINV
from pd812dta.f76a09
where	trim(ttDCT) in ('XF', 'CF', 'XM', 'XD', 'CD', 'X1', 'XC', 'CC', 'X2' )
AND ttDIVJ  between FECHA_JUL_desde 	and FECHA_JUL_hasta;


-----------------------------------------------------------------------------

select 
			
		 cast(actual.ttDCT as char(2))					as Documento
		,cast(actual.ttDIVJ as numeric(6,0))					as fecha
		,cast(actual.ttKCO as char(6))					as Compania
		,cast(substring(actual.ttVINV,4,4) as char(4))	as Centro_Emisor
		,cast(
			case
			when actual.ttDCT in ('XF','CF','XM') then 'Factura'
			when actual.ttDCT in ('XD','CD','X1') then 'Nota de Debito'
			when actual.ttDCT in ('XC','CC','X2') then 'Nota de Credito'
			else 'Doc.Desconocido'  end
			as char(25))						as Descripcion
			
		,cast(substring(actual.ttVINV,3,1) as char(1))	as Grupo_Facturas
		,cast(substring(actual.ttVINV,8,8) as char(8)) 	as Numero

--------Informacion doc anterior
,cast(substring(actual.ttVINV,8,8) - 1 as char(8))	as  nroAnterior

,cast(coalesce( 
			anterior.ttDIVJ 	,
		(	select	q1.ttDIVJ													--Fecha (Anterior)
			from	pd812dta.f76a09 as q1
			where	actual.ttKCO  		= q1.ttKCO									-- Cia
			and		substring(actual.ttVINV,4,4) 	= substring(q1.ttVINV,4,4)  		-- Centro
			and		actual.ttDCT 		= q1.ttDCT										-- Descripcion
			and		substring(actual.ttVINV,3,1) 	= substring(q1.ttVINV,3,1)  		-- Grupo fact
			and		cast(substring(actual.ttVINV,8,8) - 1 as char(8)) 		= strip( substring(q1.ttVINV,8,8), LEADING, '0') 	

		) ) as numeric(6,0))  as FechaAnterior


--------Informacion doc siguiente
,cast(substring(actual.ttVINV,8,8) + 1 as char(8)) as  nroSiguiente
,cast(coalesce( 
			siguiente.ttDIVJ ,
		(	select	max(q1.ttDIVJ)													--Fecha (Anterior)
			from	pd812dta.f76a09 as q1
			where	actual.ttKCO  		= q1.ttKCO									-- Cia
			and		substring(actual.ttVINV,4,4) 	= substring(q1.ttVINV,4,4)  		-- Centro
			and		actual.ttDCT 		= q1.ttDCT										-- Descripcion
			and		substring(actual.ttVINV,3,1) 	= substring(q1.ttVINV,3,1)  		-- Grupo fact
			and		cast(substring(actual.ttVINV,8,8) + 1 as char(8)) 		=  strip(substring(q1.ttVINV,8,8),LEADING,'0')	)							
) as numeric(6,0)) as FechaSiguiente

from QTEMP.f76a09_tmp    as actual

left outer join QTEMP.f76a09_tmp    as anterior
on					actual.ttKCO = anterior.ttKCO
			and		substring(actual.ttVINV,4,4) = substring(anterior.ttVINV,4,4)
			and		actual.ttDCT =  anterior.ttDCT
			and		substring(actual.ttVINV,3,1) = substring(anterior.ttVINV,3,1)
			and		cast(substring(actual.ttVINV,8,8) + -1 as char(8)) = strip(substring(anterior.ttVINV,8,8),LEADING,'0') 


left outer join QTEMP.f76a09_tmp    as siguiente
on					actual.ttKCO = siguiente.ttKCO
			and		substring(actual.ttVINV,4,4) = substring(siguiente.ttVINV,4,4)
			and		actual.ttDCT =  siguiente.ttDCT
			and		substring(actual.ttVINV,3,1) = substring(siguiente.ttVINV,3,1)
			and		cast(substring(actual.ttVINV,8,8) + -1 as char(8)) = strip(substring(siguiente.ttVINV,8,8),LEADING,'0');

END;
db2 return this error:
Query failed to execute. Execute Query failed.
Error type: Odbc error. Odbc operation attempted: SQLExecDirect. [42000:-104: on SQLHANDLE] [IBM][Controlador ODBC de iSeries Access][DB2 UDB]SQL0104 - Símbolo <FIN DE SENTENCIA> no válido. Símbolos válidos: ;.

any idea? TIA