VALUES INTO sentencia

La sentencia VALUES INTO asigna uno o más valores a las variables de lenguaje principal.

Invocación para VALUES INTO

Esta sentencia sólo puede incorporarse en un programa de aplicación. Es una sentencia ejecutable que no puede prepararse dinámicamente.

Autorización para VALUES INTO

Los privilegios que posee el ID de autorización de la declaración deben incluir al menos uno de los siguientes privilegios o autoridades:
  • El privilegio SELECT en cada tabla y vista identificada en la sentencia
  • Propiedad de cada mesa y vista identificada en la declaración
  • Privilegios de LECTURA y ESCRITURA en cualquier variable global que se identifique en la declaración
  • Propiedad de cualquier variable global que se identifique en la declaración
  • Autoridad DBADM para la base de datos (solo tablas)
  • Autorización DATAACCESS
  • Autorización SYSADM
  • Autorización SYSCTRL (sólo tablas de catálogo)

Inicio del cambioPara una asignación a una variable global o a un elemento de una variable global de matriz, el conjunto de privilegios debe incluir al menos uno de los siguientes:fin del cambio

Inicio del cambio
  • El privilegio WRITE en la variable
  • Propiedad de la variable
  • Autorización DATAACCESS
  • Autorización SYSADM
fin del cambio

Inicio del cambioPara una asignación a una variable de transición, el conjunto de privilegios debe incluir al menos uno de los siguientes:fin del cambio

Inicio del cambio
  • El privilegio UPDATE en la tabla o vista en la que se define el desencadenador que contiene la sentencia de asignación
  • El privilegio ACTUALIZAR en la columna correspondiente a la variable de transición a la que se le asignará un valor
  • Propiedad de la tabla o vista en la que se define el desencadenador que contiene la instrucción de asignación
  • Autoridad DBADM en la base de datos que contiene la tabla en la que se define el desencadenador que contiene la instrucción de asignación
  • Autorización DATAACCESS
  • Autorización SYSADM
fin del cambio

Se requiere autorización para cualquier expresión que se utilice en la declaración. Para más información, consulte Expresiones.

Inicio del cambioConjunto de privilegios:fin del cambio

Inicio del cambioEl conjunto de privilegios son los privilegios que tiene el propietario del paquete.fin del cambio

Sintaxis para VALUES INTO

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visual VALUES expresiónNULL(,expresiónNULL) INTO ,variable-destinovariable de matriz[índice de matriz]1
variable-destino
Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualnombre-variable-globalnombre-variable-del-alojamientoNombre del parámetro SQLnombre-variable-SQLnombre-variable-transición
Notas:
  • 1 El número de especificaciones de valor de origen (expresión, NULL o DEFAULT) a la derecha del signo igual debe coincidir con el número de especificaciones de destino a la izquierda de la instrucción.

descripción para VALUES INTO

VALUES
Introduce una sola fila que consta de una o más columnas. Si se especifica más de un valor, la lista de valores debe ir entre paréntesis.
expresión
Inicio del cambioLa expresión es cualquier expresión del tipo descrito en Expresiones. La expresión no debe incluir un nombre de columna.fin del cambio
NULL
El valor nulo. NULL solo se puede especificar para variables de host que tengan una variable indicadora asociada.
EN variable de destino o variable de matriz [ índice de matriz ]
Identifica uno o varios destinos para la asignación de los valores de salida. El número de objetivos en la cláusula INTO debe ser igual al número de valores que se van a asignar. El primer valor de la fila del resultado se asigna al primer destino de la lista, el segundo valor al segundo destino, etcétera. Una variable objetivo no debe especificarse más de una vez en la cláusula INTO. Cada asignación a un objetivo se realiza en secuencia a través de la lista, según las reglas descritas en Asignación y comparación.

El valor 'W' se asigna al campo ' SQLWARN3 ' de la SQLCA si el número de objetivos es menor que el número de valores de la columna de resultados.

Si se produce un error en cualquier asignación, el valor no se asigna al destino y no se asignan más valores a los destinos especificados. Los valores que ya se hayan asignado permanecerán asignados.

nombre-variable-global
Identifica la variable global que es el sujeto de la asignación.
nombre-variable-del-alojamiento
Identifica la variable del lenguaje principal que es el sujeto de la asignación. Para los valores de salida LOB, el destino puede ser una variable del lenguaje principal normal (si es lo suficientemente grande), una variable de localizador LOB o una variable de referencia a archivos LOB.
Nombre del parámetro SQL
Identifica el parámetro que es el sujeto de la asignación.
nombre-variable-SQL
Identifica la variable de SQL que es el sujeto de la asignación. Las variables de SQL se deben declarar antes de utilizarlas.
Inicio del cambionombre-variable-de-transiciónfin del cambio
Inicio del cambioFL 500Identifica la columna que debe actualizarse en la tabla de transición. Un nombre de variable de transición debe identificar una columna en la tabla de asunto de un desencadenante, opcionalmente cualificada por un nombre de correlación, que identifique el nuevo valor.fin del cambio
variable-matriznd ice-matriz]
Especifica un elemento de matriz que es el objetivo de la asignación.

No debe especificarse un elemento de matriz como destino de una asignación si también se especifica una expresión de tabla común en la sentencia.

variable de matriz
Especifica una variable de matriz.
[array-index ]
Expresión que especifica qué elemento de la matriz es el destino de la asignación.

Para una matriz ordinaria, la expresión del índice de la matriz debe ser convertible a INTEGER y no debe ser el valor nulo. El valor del índice debe estar entre 1 y la cardinalidad máxima definida para la matriz.

Para una matriz asociativa, la expresión del índice de la matriz debe ser convertible al tipo de datos de índice de la matriz asociativa, y no debe ser el valor nulo.

array-index no debe ser:

  • Expresión que hace referencia al registro especial FECHA ACTUAL, HORA ACTUAL o MARCA DE TIEMPO ACTUAL
  • Una función no determinista
  • Una función que se define con ACCIÓN EXTERNA
  • Una función que se define con MODIFIES SQL DATA
  • Una expresión de secuencia

Notas para VALUES INTO

Asignación a objetivos:
Inicio del cambioEl enésimo objetivo identificado por la cláusula INTO corresponde a la enésima columna de la tabla de resultados del cursor. El tipo de datos del destino debe ser compatible con su valor correspondiente. Si el valor es numérico, el destino debe tener la capacidad de representar la parte entera del valor. Para un valor datetime, el destino debe ser una variable de cadena de caracteres de una longitud mínima como se define en Representaciones de cadena de valores datetime. Cuando el valor que se va a asignar es nulo, se debe especificar una variable indicadora para la variable de destino.fin del cambio

Las asignaciones se realizan en orden a través de la lista. Cada asignación a un objetivo se realiza según las reglas descritas en Elementos de lenguaje en SQL. Si el número de objetivos es menor que el número de valores de la fila, el campo " SQLWARN3 " (valor de la columna) del SQLCA se establece en "W". No hay advertencia si hay más objetivos que el número de columnas de resultados. Si se asigna un valor nulo a una variable objetivo, se debe proporcionar una variable indicadora. Si se produce un error de asignación, el valor no se asigna al destino y no se asignan más valores a los destinos. Cualquier valor que ya se haya asignado a los destinos continúa asignado. Sin embargo, si se trata de valores LOB, existe la posibilidad de que el objetivo correspondiente se haya modificado, pero el contenido de la variable es impredecible.

Si se incluye más de una asignación en la misma declaración de asignación, todas las expresiones se evalúan antes de que se realicen las asignaciones. Por ejemplo, una referencia a una variable en una expresión siempre utiliza el valor de la variable antes de cualquier asignación en la sentencia de asignación.

Normalmente, se utilizan localizadores LOB para asignar y recuperar datos de columnas LOB. Sin embargo, debido a las reglas de compatibilidad, también puede utilizar localizadores LOB para asignar datos a objetivos con otros tipos de datos. Para obtener más información sobre el uso de localizadores, consulte Ahorro de almacenamiento al manipular LOB mediante el uso de localizadores de LOB.

Esquema de codificación predeterminado:
El esquema de codificación predeterminado para los datos es el valor de la opción de enlace ENCODING, que es la opción de codificación de la aplicación. Si esta sentencia se utiliza con funciones como LENGTH o SUBSTRING que operan sobre localizadores LOB, y los datos LOB especificados por el localizador están en un esquema de codificación diferente al de la opción de enlace ENCODING, se produce la materialización LOB y la conversión de caracteres. Para evitar la materialización de LOB y la conversión de caracteres, seleccione los datos LOB de la tabla de muestra SYSIBM.SYSDUMMYA, SYSIBM.SYSDUMMYE o SYSIBM.SYSDUMMYU.

Ejemplos de VALUES INTO

Ejemplo 1 : Asignar el valor del registro especial CURRENT PATH a la variable host HV1.
   EXEC SQL VALUES(CURRENT PATH)
            INTO :HV1;
Ejemplo 2 : Asignar el valor del registro especial CURRENT MEMBER a la variable de host MEM.
   EXEC SQL VALUES(CURRENT MEMBER)
            INTO :MEM;
Ejemplo 3 : Supongamos que el localizador LOB LOB1 está asociado a un valor CLOB. Asigne una parte del valor CLOB a la variable host DETAILS utilizando el localizador LOB.
   EXEC SQL VALUES (SUBSTR(:LOB1,1,35))
            INTO :DETAILS;
Si los datos LOB especificados por el localizador LOB LOB1 tiene un esquema de codificación diferente al valor de la opción de enlace ENCODING, y desea evitar la materialización de LOB y la conversión de caracteres, utilice la siguiente instrucción en lugar de la instrucción VALUES INTO:
   EXEC SQL SELECT SUBSTR(:LOB1,1,35)
            INTO :DETAILS
            FROM SYSIBM.SYSDUMMYU;
Ejemplo 4 : Usando una sentencia VALUES INTO, recupera el valor de INTVAR1 en un elemento de la matriz MYINTARRAY1, que está indexada por el valor de la expresión INTCOL2+MYINTVAR+1.
VALUES INTVAR1 INTO MYINTARRAY1[INTCOL2+MYINTVAR+1];