¿has probado a ejecutar la sentencia SQL directamente desde STRSQL?
¿tienes el ultimo acumulativo de PTFs en el sistema en V5R1?
¿y el ultimo nivel de PTFs de base de datos?
El día 21/06/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> escribió:
Foro buenos dias
Se ha realizado un procedimiento PL/SQL, al mandar a crear este procedimiento en el servidor AS/400 Modelo 720 V5R1M0 nos presenta el siguiente mensaje de error:
Estado de SQL: 42601
Código de proveedor: -104
Mensaje: [SQL0104] Signo ESP no válido. Signos válidos: ) ,. Causa . . . . . : Se ha detectado un error de sintaxis en el signo ESP. El signo ESP no es un signo válido. Una lista parcial de signos válidos es ) ,. Esta lista asume que la sentencia es correcta hasta el signo. El error puede estar anteriormente en la sentencia, pero la sintaxis de la sentencia aparece como válida hasta este punto.Recuperación . : Efectúe una o más de las siguientes acciones y vuelva a intentar la petición:-- Verifique la sentencia SQL en el área del signo ESP. Corrija la sentencia. El error podría ser la omisión de una coma o comillas; podría tratarse de una palabra con errores ortográficos, o podría estar relacionado con el orden de las cláusulas.-- Si el signo de error es <FIN DE SENTENCIA>, corrija la sentencia SQL porque no finaliza con una cláusula válida.
Se ha finalizado el proceso ya que la sentencia resaltada no se ha completado satisfactoriamente
Cuando se retira del procedimiento la sentencia UNION este funciona correctamente.
Cuando lo ejecutamos en otro servidor que tenemos AS/400 Modelo 270 V5R3M0 aca si funciona correctamente el procedimiento.
Cabe indicar que las versiones del sistema operativo en los 2 servidores son diferentes.
El procedimiento es:
CREATE PROCEDURE INVENT.PRD_TXTRS (
IN EMPCOD1 CHAR(3) ,
IN BODCOD1 INTEGER ,
IN VEHICULO1 VARCHAR(50) )
DYNAMIC RESULT SETS 1
LANGUAGE SQL
SPECIFIC INVENT.PRD_TXTRS
NOT DETERMINISTIC
READS SQL DATA
CALLED ON NULL INPUT
BEGIN
DECLARE C1 CURSOR WITH RETURN FOR
SELECT ESPDESCO , CODBARRAS , SUM ( CANTIDAD ) AS CANTIDAD , CONTROL
FROM (
( SELECT ESP . ESPDESCO , VARCHAR ( PRD . GRUCOD ) || '-' ||
VARCHAR ( PRD . CLACOD ) || '-' || VARCHAR ( PRD . TIPCOD ) || '-' ||
VARCHAR ( PRD . ESPCOD ) AS CODBARRAS , SUM ( TRS1 . TRSCAN ) AS CANTIDAD , TRSCONTR . CONTROL CONTROL
FROM INVENT . TRS1 TRS1 , INVENT . TRS TRS , INVENT . ESP ESP , INVENT . PRD PRD ,
INVENT . TRSCONTR TRSCONTR
WHERE
TRS1 . EMPCOD = TRS . EMPCOD AND
TRS1 . BODCOD = TRS . BODCOD AND
TRS1 . SBOCOD = TRS . SBOCOD AND
TRS1 . TRSNUM = TRS . TRSNUM AND
ESP . EMPCOD = PRD . EMPCOD AND
ESP . GRUCOD = PRD . GRUCOD AND
ESP . CLACOD = PRD . CLACOD AND
ESP . TIPCOD = PRD . TIPCOD AND
ESP . ESPCOD = PRD . ESPCOD AND
TRS1 . EMPCOD = PRD . EMPCOD AND
TRS1 . GRUCOD = PRD . GRUCOD AND
TRS1 . CLACOD = PRD . CLACOD AND
TRS1 . TIPCOD = PRD . TIPCOD AND
TRS1 . ESPCOD = PRD . ESPCOD AND
TRS1 . BODCOD = PRD . BODCOD AND
TRS1 . SBOCOD = PRD . SBOCOD AND
( TRS . BODCOD = BODCOD1 ) AND
( TRS . TRSEST = ' ' )
AND TRS . EMPCOD = 'EEC'
AND TRSCONTR . EMPCOD = TRS1 . EMPCOD AND
TRSCONTR . BODCOD = TRS1 . BODCOD
AND TRSCONTR . SBOCOD = TRS1 . SBOCOD AND
TRS1 . TRSNUM = TRSCONTR . TRS
AND TRSCONTR . CONTROL = ( SELECT CODIGO FROM INVENT . CONTROL
WHERE CODIGO = ( SELECT MAX ( CODIGO ) FROM INVENT . CONTROL
WHERE VEHICULO = VEHICULO1
AND ACCION = 'Ingreso' ) )
AND TMICOD = TRSCONTR . TIPO
AND TRSCONTR . TIPO = 'EG'
GROUP BY ESP . ESPDESCO , VARCHAR ( PRD . GRUCOD ) || '-' || VARCHAR ( PRD . CLACOD )
|| '-' || VARCHAR ( PRD . TIPCOD ) || '-' || VARCHAR ( PRD . ESPCOD ) , TRSCONTR . CONTROL )
UNION
( SELECT ESP . ESPDESCO , VARCHAR ( PRD . GRUCOD ) || '-' ||
VARCHAR ( PRD . CLACOD ) || '-' || VARCHAR ( PRD . TIPCOD ) || '-' ||
VARCHAR ( PRD . ESPCOD ) AS CODBARRAS ,
SUM ( TRS1 . TRSCAN ) * ( - 1 ) AS CANTIDAD , TRSCONTR . CONTROL CONTROL
FROM INVENT . TRS1 TRS1 , INVENT . TRS TRS , INVENT . ESP ESP , INVENT . PRD PRD , INVENT . TRSCONTR TRSCONTR
WHERE
TRS1 . EMPCOD = TRS . EMPCOD AND
TRS1 . BODCOD = TRS . BODCOD AND
TRS1 . SBOCOD = TRS . SBOCOD AND
TRS1 . TRSNUM = TRS . TRSNUM AND
ESP . EMPCOD = PRD . EMPCOD AND
ESP . GRUCOD = PRD . GRUCOD AND
ESP . CLACOD = PRD . CLACOD AND
ESP . TIPCOD = PRD . TIPCOD AND
ESP . ESPCOD = PRD . ESPCOD AND
TRS1 . EMPCOD = PRD . EMPCOD AND
TRS1 . GRUCOD = PRD . GRUCOD AND
TRS1 . CLACOD = PRD . CLACOD AND
TRS1 . TIPCOD = PRD . TIPCOD AND
TRS1 . ESPCOD = PRD . ESPCOD AND
TRS1 . BODCOD = PRD . BODCOD AND
TRS1 . SBOCOD = PRD . SBOCOD AND
( TRS . BODCOD = BODCOD1 ) AND
( TRS . TRSEST = ' ' )
AND TRS . EMPCOD = 'EEC'
AND TRSCONTR . EMPCOD = TRS1 . EMPCOD AND
TRSCONTR . BODCOD = TRS1 . BODCOD
AND TRSCONTR . SBOCOD = TRS1 . SBOCOD AND
TRS1 . TRSNUM = TRSCONTR . TRS
AND TRSCONTR . CONTROL = ( SELECT CODIGO FROM INVENT . CONTROL
WHERE CODIGO = ( SELECT MAX ( CODIGO ) FROM INVENT . CONTROL
WHERE VEHICULO = VEHICULO1
AND ACCION = 'Ingreso' ) )
AND TMICOD = TRSCONTR . TIPO
AND TRSCONTR . TIPO = 'IN'
GROUP BY ESP . ESPDESCO , VARCHAR ( PRD . GRUCOD ) || '-' || VARCHAR ( PRD . CLACOD )
|| '-' || VARCHAR ( PRD . TIPCOD ) || '-' || VARCHAR ( PRD . ESPCOD ) , TRSCONTR . CONTROL )
) TODO
GROUP BY ESPDESCO , CODBARRAS , CONTROL ;
OPEN C1 ;
END ;
Saludos
--
Mi blog sobre as400
http://www.ajut400.com
