Hola

La "norma" es la de SQL de DB2 de i; que dicho así parece una tonteria (y seguramente lo sea 😁) pero lo que quiero decir es que es SQL standard con adaptaciones para i. El ejemplo a lo mejor lo has sacado de la página de DB2 de Z, que también tiene sus diferencias.

En tu sentencia funcionaría con un segundo SELECT (quizá con DISTINCT o alguna cláusula para que solo devuelva una fila)

UPDATE PROJECT P

      SET P.LOCATION = (*SELECT* D.LOCATION

      FROM DEPARTMENT D

      WHERE P.DEPTNO = D.DEPTNO);


Para buscar en Google yo suelo añadir iseries a las búsquedas para acotar, aunque no siempre sirve.

Y como referencia, tienes la documentación de IBM donde también puedes encontrar ejemplos (sobre todo en el de programación):

https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/db2/rbafzintro.htm

https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/sqlp/rbafykickoff.htm

Saludos

Carlos


El 8/3/21 a las 16:45, estela retes escribió:
Muchas gracias Sergio por tu aclaración.
Estudiaremos la manera de realizar el merge, ya que parece bastante útil y las casuísticas en las que se puede utilizar son muy comunes.

Aún así,me gustaría saber cual es la "norma" de SQL en la que deberíamos basarnos en casos como estos, ya que es bastante complicado encontrar ayuda que "funcione" googleando sin saber qué debemos tener en cuenta de base.

El ejemplo lo hemos sacado de la web de IBM de DB2 pero NO de DB2 for i, y es por eso que nos lleva a error. Tampoco debemos basarnos en la norma de SQL server /my sql o cualquier otro, y estaría bien si alguien nos pudiese aclarar de dónde partir a la hora de ver la sintaxis o los ejemplos.

Lo dicho, mil gracias!



On Mon, Mar 8, 2021 at 4:36 PM Sergio Martinez Roig <[email protected] <mailto:[email protected]>> wrote:

    Hola Estela,

    Para ejecutar este tipo de sentencias update de una tabla en
    función de otra debes utilizar la estructura MERGE, en el ejemplo
    que pones tú sería de la siguiente manera:

    MERGE INTO PROJECT AS P

    USING (SELECT DEPTNO, LOCATION FROM DEPARTMENT) AS D

    ON P.DEPTNO = D.DEPTNO

    WHEN MATCHED THEN UPDATE SET P.LOCATION = D.LOCATION;

    Hasta dónde yo se un UPDATE no acepta el FROM. Otra cosa que no
    tengo clara es a partir de que reléase está disponible el MERGE.

    En este artículo te explica bien el MERGE:

    https://medium.com/@esteeeban10/merge-en-db2-as400-3ab986c36bef
    <https://medium.com/@esteeeban10/merge-en-db2-as400-3ab986c36bef>

    Un saludo

    Sergio Martínez

    Estibarna, CPE

    *De:* Forum.help400 <[email protected]
    <mailto:[email protected]>> *En nombre de
    *estela retes
    *Enviado el:* lunes, 8 de marzo de 2021 16:16
    *Para:* forum.help400 <[email protected]
    <mailto:[email protected]>>
    *Asunto:* Norma SQL DB2 en V7R4

    Buenas a todos,

    Disculpad por lo básico de la pregunta.

    Estamos intentando ejecutar unas sentencias SQL de tipo UPDATE
    desde el Rational (desde STRSQL nos ocurre lo mismo), similares a
    ésta de un manual de IBM:

    UPDATE PROJECT P

          SET P.LOCATION = D.LOCATION

          FROM DEPARTMENT D

          WHERE P.DEPTNO = D.DEPTNO;

    Estamos obteniendo el error:

    [SQL0199] Palabra clave FROM inesperada. Símbolos válidos: USE
    SKIP WAIT WITH FETCH LIMIT ORDER WHERE OFFSET.

    Entendemos que no nos está permitiendo poner una cláusula FROM en
    una UPDATE y nos gustaría saber porqué nos está rechazando esta
    sintaxis y en qué "norma" de SQL debemos basarnos a la hora de
    construir dichas sentencias.

    Gracias a todos y un saludo.

--
    Estela

    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
    <http://bit.ly/db68dd> )
    Forum.Help400 © Publicaciones Help400, S.L.



--
Estela

____________________________________________________
�nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 � Publicaciones Help400, S.L.
____________________________________________________
�nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 � Publicaciones Help400, S.L.

Reply via email to