Fíjate en la cláusula @where:

@where=  ' Arcodi in' +%trim(@cadena_in)
        +' and arpmmi=(select min(arpmmi) from arcfil/fartic'
        +' where arcodi in'+%trim(@cadena_in);

El paréntesis que hay antes del “select min” no lo estás cerrando, la sentencia 
debería terminar con +%trim(@cadena_in)+’)’; para que se cerrara el que se abre

Y antes del “into” ya cierras el paréntesis de la cláusula “VALUES”

De: [email protected] 
[mailto:[email protected]] En nombre de alberto
Enviado el: martes, 16 de octubre de 2018 11:31
Para: forum.help400
Asunto: RE: Error en SQL dinámico con prepare y execute

Hola Sergio.
Si lo hago así, luego tengo que abrir otras comillas para el INTO
Se puede dejar así:
@select='arcodi, dec((arpmmi/1000), 7, 2) from arcfil/fartic ';
@where=  ' Arcodi in' +%trim(@cadena_in)
        +' and arpmmi=(select min(arpmmi) from arcfil/fartic'
        +' where arcodi in'+%trim(@cadena_in);
@into='?, ?';
@sentencia=' Values(Select '+%trim(@select)+
           ' Where ' +%trim(@where)+ ')' +
           ' Into '+%trim(@into);
Exec Sql prepare Sentencia from :@sentencia;
Exec SQl Execute Sentencia using :@article, :@pes_min_max;

Pero me sigue dando ese error.  :(


Albert Martinez de Urda
 Director TIC
Roler España SLU
Grupo Arcadie



De:        "Sergio Martinez Roig" <[email protected]>
Para:        "forum.help400" <[email protected]>
Fecha:        16/10/2018 10:52
Asunto:        ** Newsletter ** RE: Error en SQL dinámico con prepare y execute
Enviado por:        [email protected]
________________________________



Más concretamente faltaría cerrar  la subconsulta en la cláusula

@where=  ' Arcodi in ' +%trim(@cadena_in)
       +' and arpmmi=(select min(arpmmi) from arcfil/fartic'
       +' where arcodi in '+%trim(@cadena_in)+’)’

De: [email protected] 
[mailto:[email protected]] En nombre de Sergio Martinez 
Roig
Enviado el: martes, 16 de octubre de 2018 10:33
Para: forum.help400
Asunto: RE: Error en SQL dinámico con prepare y execute

Hola Alberto,

Creo que te falta un cierre de paréntesis antes de la cláusula INTO para cerrar 
el que abre VALUES(.

Un saludo
Sergio Martinez

De: [email protected] 
[mailto:[email protected]] En nombre de alberto
Enviado el: martes, 16 de octubre de 2018 9:27
Para: forum.help400
Asunto: Error en SQL dinámico con prepare y execute

Hola Foro.
A ver si me podéis ayudar, que muchos ojos ven más que dos, y yo no consigo ver 
el qué:
Partiendo de este script que funciona perfectamente:

select arcodi, dec((arpmmi/1000), 7, 2)
from arcfil.fartic
where
arcodi in (209400,209200,213600,215200) and
arpmmi=( select min(arpmmi) from arcfil.fartic where
arcodi in (209400,209200,213600,215200));

Quiero hacer un embebido dinámico en un programa.

Lo que hago es lo siguiente:

@select='arcodi, dec((arpmmi/1000), 7, 2) from arcfil/fartic ';
@where=  ' Arcodi in ' +%trim(@cadena_in)
       +' and arpmmi=(select min(arpmmi) from arcfil/fartic'
       +' where arcodi in '+%trim(@cadena_in);
@sentencia=' Values(Select '+%trim(@select)+
          ' Where ' +%trim(@where)+ ') into ?, ?';
Exec Sql prepare Sentencia from :@sentencia;
Exec SQl Execute Sentencia using :@article, :@pes_min_max;

El resultante de la variable @sentencia es:

Values(Select arcodi, dec((arpmmi/1000), 7, 2) from arcfil/
fartic Where Arcodi in(209400, 209200, 213600, 215200) and arpmmi=
(select min(arpmmi) from arcfil/fartic where arcodi in
(209400, 209200, 213600, 215200)) into ?, ?

El caso es que al ejecutar el prepare, me da un error SQLSTATE:
42601 A character, token, or clause is invalid or missing.

No consigo encontrar qué me dejo.
Alguna pista?
Gracias!!!


Este mensaje contiene información confidencial dirigida al destinatario del 
mismo. Las opiniones expresadas pertenecen al autor y no necesariamente a 
ESTIBARNA. Si Ud. recibe este mensaje por error, se ruega informe 
inmediatamente al remitente del mismo. Queda prohibido el uso, divulgación, 
copia o distribución a terceros de la información incluida en este mensaje.

Este mensaje contiene información confidencial dirigida al destinatario del 
mismo. Las opiniones expresadas pertenecen al autor y no necesariamente a 
ESTIBARNA. Si Ud. recibe este mensaje por error, se ruega informe 
inmediatamente al remitente del mismo. Queda prohibido el uso, divulgación, 
copia o distribución a terceros de la información incluida en este mensaje. 
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.

Este mensaje contiene información confidencial dirigida al destinatario del 
mismo. Las opiniones expresadas pertenecen al autor y no necesariamente a 
ESTIBARNA. Si Ud. recibe este mensaje por error, se ruega informe 
inmediatamente al remitente del mismo. Queda prohibido el uso, divulgación, 
copia o distribución a terceros de la información incluida en este mensaje.
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.

Responder a