Hola:

¿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

Responder a