Notas del release

38.3 Capítulo 4. Funciones

38.3.1 Cómo habilitar las nuevas funciones y procedimientos

Los FixPaks de la Versión 7 ofrecen nuevas funciones escalares incorporadas de SQL. Consulte las actualizaciones del manual Consulta de SQL para obtener una descripción de estas nuevas funciones. Las nuevas funciones no se habilitan automáticamente en cada base de datos cuando el código del servidor de bases de datos se actualiza al nuevo nivel de servicio. Para habilitar estas funciones nuevas, el administrador del sistema debe emitir el mandato db2updv7, especificando cada una de las bases de datos en el servidor. Este mandato crea una entrada en la base de datos que asegura que los objetos de la base de datos que se crean antes de ejecutar este mandato utilicen las signaturas de función que se correspondan con las signaturas de función nuevas.

Para obtener más información sobre cómo habilitar las funciones de MQSeries (las definidas en el esquema MQDB2), consulte MQSeries.

38.3.2 Funciones escalares

38.3.2.1 ABS o ABSVAL

>>-+-ABS----+--(expresión)-------------------------------------><
   '-ABSVAL-'
 

El esquema es SYSIBM.

Esta función apareció por primera vez en el FixPack 2 de la Versión 7.1.

Nota:
La versión SYSFUN de la función ABS (o ABSVAL) continúa estando disponible.

Devuelve el valor absoluto del argumento.

El argumento es una expresión que devuelve un valor de cualquier tipo de datos numérico incorporado.

El resultado de la función tiene el mismo tipo de datos y atributo de longitud que el argumento. Si el argumento puede ser nulo o la base de datos se configura con DFT_SQLMATHWARN establecido en sí, el resultado puede ser nulo; si el argumento es nulo, el resultado es el valor nulo.

Por ejemplo:

ABS(-51234)

devuelve un valor entero igual 51234.

38.3.2.2 DECRYPT_BIN y DECRYPT_CHAR

>>-+-DECRYPT_BIN--+--------------------------------------------->
   '-DECRYPT_CHAR-'
 
>----(--datos-cifrados--+---------------------------------+---)--><
                        '-,--expresión-cadena-contraseña--'
 

El esquema es SYSIBM.

Esta función apareció por primera vez en el FixPack 3 de la Versión 7.1.

Las funciones DECRYPT_BIN y DECRYPT_CHAR devuelven un valor que es el resultado de descifrar los datos-cifrados. La contraseña utilizada para el descifrado es el valor expresión-cadena-contraseña o el valor ENCRYPTION PASSWORD (que se asignó utilizando la sentencia SET ENCRYPTION PASSWORD). Las funciones DECRYPT_BIN y DECRYPT_CHAR sólo pueden descifrar valores que se cifraron mediante la función ENCRYPT (SQLSTATE 428FE).

datos-cifrados
Es una expresión que devuelve un valor CHAR FOR BIT DATA o VARCHAR FOR BIT DATA, que es una cadena de datos cifrada completa que se cifró utilizando la función ENCRYPT.

expresión-cadena-contraseña
Es una expresión que devuelve un valor CHAR o VARCHAR con un mínimo de 6 bytes y un máximo de 127 bytes (SQLSTATE 428FC). Esta contraseña debe ser la misma que la utilizada para cifrar los datos, de lo contrario el descifrado será erróneo (SQLSTATE 428FD). Si valor de la contraseña argumento es nulo o no se proporciona, los datos se cifran utilizando el valor ENCRYPTION PASSWORD, el cual se debe haber establecido para la sesión (SQLSTATE 51039).

El resultado de la función DECRYPT_BIN es VARCHAR FOR BIT DATA. El resultado de la función DECRYPT_CHAR es VARCHAR. Si los datos-cifrados incluyen un recordatorio de contraseña, la función no devuelve el recordatorio. El atributo de longitud del resultado es igual al atributo de longitud del tipo de datos de los datos-cifrados menos 8 bytes. La longitud real del valor devuelto por la función coincidirá con la longitud de la cadena original que se cifró. Si los datos-cifrados incluyen bytes más allá de la cadena cifrada, la función no devuelve estos bytes. Si el primer argumento puede ser nulo, el resultado puede ser nulo; si el primer argumento es nulo, el resultado es el valor nulo.

Si los datos se descifran en un sistema diferente utilizando una página de códigos distinta de la utilizada en el cifrado, puede producirse una expansión al convertir el valor descifrado a la página de códigos de la base de datos. En estos casos, los datos-cifrados se deben convertir a una cadena VARCHAR con un número mayor de bytes.

Vea también 38.3.2.3, ENCRYPT y 38.3.2.4, GETHINT para obtener más información sobre el uso de esta función.

Ejemplos:

Ejemplo 1: Este ejemplo utiliza el valor ENCRYPTION PASSWORD para contener la contraseña de cifrado.

   SET ENCRYPTION PASSWORD = 'Ben123';
   INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832');
   SELECT DECRYPT_CHAR(SSN)
      FROM SSN;

El valor devuelto es '289-46-8832'.

Ejemplo 2: Este ejemplo devuelve explícitamente la contraseña de cifrado.

      SELECT DECRYPT_CHAR(SSN,'Ben123')
      FROM SSN;

El valor devuelto es '289-46-8832'.

38.3.2.3 ENCRYPT

>>-ENCRYPT------------------------------------------------------>
 
>----(--expresión-cadena-datos--+------------------------------------------------------------------------+---)->
                                '-,--expresión-cadena-contraseña--+-----------------------------------+--'
                                                                  '-,--expresión-cadena-recordatorio--'
 
>--------------------------------------------------------------><
 

El esquema es SYSIBM.

Esta función apareció por primera vez en el FixPack 3 de la Versión 7.1.

La función ENCRYPT devuelve un valor que es el resultado de cifrar expresión-cadena-datos. La contraseña utilizada para el cifrado es el valor expresión-cadena-contraseña o el valor ENCRYPTION PASSWORD (que se asignó utilizando la sentencia SET ENCRYPTION PASSWORD).

expresión-cadena-datos
Es una expresión que devuelve un valor CHAR o VARCHAR para cifrar. El atributo de longitud correspondiente al tipo de datos de expresión-cadena-datos está limitado a 32663 si no se especifica el argumento expresión-cadena-recordatorio y a 32631 si se especifica el argumento expresión-cadena-recordatorio (SQLSTATE 42815).

expresión-cadena-contraseña
Es una expresión que devuelve un valor CHAR o VARCHAR con un mínimo de 6 bytes y un máximo de 127 bytes (SQLSTATE 428FC). El valor representa la contraseña utilizada para cifrar la expresión-cadena-datos. Si valor de la contraseña argumento es nulo o no se proporciona, los datos se cifran utilizando el valor ENCRYPTION PASSWORD, el cual se debe haber establecido para la sesión (SQLSTATE 51039).

expresión-cadena-recordatorio
Es una expresión que devuelve un valor CHAR o VARCHAR, con un máximo de 32 bytes, que ayuda al usuario a recordar la contraseña (por ejemplo, 'Océano' como recordatorio de 'Pacífico'). Si se proporciona un recordatorio, se intercala en el resultado y se puede recuperar utilizando la función GETHINT. Si este argumento es nulo o no se proporciona, no se incluirá ningún recordatorio en el resultado.

El tipo de datos resultante de la función es VARCHAR FOR BIT DATA.

El atributo de longitud del resultado es:

Si el primer argumento puede ser nulo, el resultado puede ser nulo; si el primer argumento es nulo, el resultado es el valor nulo.

Observe que el resultado cifrado es más largo que el valor expresión-cadena-datos. Por lo tanto, cuando asigne valores cifrados, compruebe que el destino esté definido con el suficiente tamaño para contener el valor cifrado completo.

Notas:

Vea también 38.3.2.2, DECRYPT_BIN y DECRYPT_CHAR y 38.3.2.4, GETHINT para obtener más información sobre el uso de esta función.

Ejemplos:

Ejemplo 1: Este ejemplo utiliza el valor ENCRYPTION PASSWORD para contener la contraseña de cifrado.

   SET ENCRYPTION PASSWORD = 'Ben123';
   INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832');

Ejemplo 2: Este ejemplo devuelve explícitamente la contraseña de cifrado.

   INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832','Ben123','');

Ejemplo 3: En este ejemplo se guarda el recordatorio 'Océano' para ayudar al usuario a recordar la contraseña de cifrado 'Pacífico'.

    INSERT INTO EMP (SSN)
VALUES ENCRYPT('289-46-8832','Pacífico','Océano');
 

38.3.2.4 GETHINT

>>-GETHINT--(--datos-cifrados--)-------------------------------><
 

El esquema es SYSIBM.

Esta función apareció por primera vez en el FixPack 3 de la Versión 7.1.

La función GETHINT devuelve el recordatorio de contraseña si se encuentra uno en los datos-cifrados. Un recordatorio de contraseña es una expresión que ayuda al usuario a recordar la contraseña (por ejemplo, 'Océano' como recordatorio de 'Pacífico').

datos-cifrados

Es una expresión que devuelve un valor CHAR FOR BIT DATA o VARCHAR FOR BIT DATA, que es una cadena de datos cifrada completa que se cifró utilizando la función ENCRYPT (SQLSTATE 428FE).

El resultado de la función es VARCHAR(32). El resultado puede ser nulo; si la función ENCRYPT no añadió un recordatorio de contraseña a los datos-cifrados o si el primer argumento es nulo, el resultado es el valor nulo.

Vea también 38.3.2.2, DECRYPT_BIN y DECRYPT_CHAR y 38.3.2.3, ENCRYPT para obtener más información sobre el uso de esta función.

Ejemplo:

En este ejemplo se guarda el recordatorio 'Océano' para ayudar al usuario a recordar la contraseña de cifrado 'Pacífico'.

   INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832', 'Pacífico','Océano');
   SELECT GETHINT(SSN)
      FROM EMP;

El valor devuelto es 'Océano'.

38.3.2.5 IDENTITY_VAL_LOCAL

>>-IDENTITY_VAL_LOCAL--(--)------------------------------------><
 

El esquema es SYSIBM.

Este procedimiento apareció por primera vez en el FixPack 3 de la Versión 7.1.

La función IDENTITY_VAL_LOCAL es una función no determinista que devuelve el valor asignado más recientemente a una columna de identidad, en la que la asignación se produjo como resultado de una sentencia INSERT de una sola fila y una cláusula VALUES. Esta función no tiene parámetros de entrada.

El resultado es un valor DECIMAL(31,0), para cualquiera que sea el tipo de datos real de la correspondiente columna de identidad.

El valor devuelto por la función es el valor asignado a la columna de identidad de la tabla identificada en la sentencia INSERT más reciente para una sola fila. La sentencia INSERT se debe crear utilizando una cláusula VALUES para una tabla que contiene una columna de identidad. Además, la sentencia INSERT se debe emitir al mismo nivel 1 (es decir, que el valor está disponible localmente al nivel en que se ha asignado, hasta que lo sustituye el siguiente valor asignado).

El valor asignado puede ser un valor proporcionado por el usuario (si la columna de identidad está definida como GENERATED BY DEFAULT), o un valor de identidad generado por DB2.

La función devuelve un valor nulo en las situaciones siguientes:

El resultado de la función no se ve afectado por lo siguiente:

Notas:

Ejemplos:

Ejemplo 1: Establecer la variable IVAR en el valor asignado a la columna de identidad de la tabla EMPLOYEE. Si esta inserción es la primera que se realiza en la tabla EMPLOYEE, IVAR tendrá el valor 1.

   CREATE TABLE EMPLOYEE
      (EMPNO   INTEGER GENERATED ALWAYS AS IDENTITY,
       NAME CHAR(30),
       SALARY DECIMAL(5,2),
       DEPTNO  SMALLINT)

Ejemplo 2: Una función IDENTITY_VAL_LOCAL invocada en una sentencia INSERT devuelve el valor asociado a la sentencia INSERT anterior para una sola fila, con una cláusula VALUES para una tabla que tiene una columna de identidad. Supongamos, para este ejemplo, que existen dos tablas, T1 y T2. Ambas, T1 y T2, tienen una columna de identidad llamada C1. DB2 genera una secuencia de valores, que empiezan por 1 para la columna C1 de la tabla T1, y que empiezan por 10 para la columna C1 de la tabla T2.

   CREATE TABLE T1
      (C1 INTEGER GENERATED ALWAYS AS IDENTITY,
       C2 INTEGER),
   CREATE TABLE T2
      (C1 DECIMAL(15,0) GENERATED BY DEFAULT AS IDENTITY
         (START WITH 10),
       C2 INTEGER),
   INSERT INTO T1 (C2) VALUES (5),
   INSERT INTO T1 (C2) VALUES (6),
   SELECT * FROM T1

el resultado sería:

      C1            C2
      -----------   ----------
                1            5
                2            6

y esta es la declaración de la función para la variable IVAR:

   VALUES IDENTITY_VAL_LOCAL() INTO :IVAR

En este momento, la función IDENTITY_VAL_LOCAL devolvería el valor 2 en IVAR, pues éste es el valor asignado más recientemente por DB2. La sentencia INSERT siguiente inserta una sola fila en T2, donde la columna C2 obtiene el valor 2 proporcionado por la función IDENTITY_VAL_LOCAL.

INSERT INTO T2 (C2) VALUES (IDENTITY_VAL_LOCAL());
   SELECT * FROM T2
      WHERE C1 = DECIMAL(IDENTITY_VAL_LOCAL(),15,0)

el resultado sería:

             C1                  C2
      -----------------   ----------
                    10.            2

Si se invoca la función IDENTITY_VAL_LOCAL después de esta inserción, se obtiene el valor 10, que es el valor generado por DB2 para la columna C1 de T2.

Si se utiliza el anidamiento de funciones con un desencadenante, puede utilizar la función IDENTITY_VAL_LOCAL para recuperar el valor de identidad asignado a un nivel determinado, aunque puede haber valores de identidad asignados a niveles inferiores. Supongamos que existen tres tablas: EMPLOYEE, EMP_ACT y ACCT_LOG. Existe un desencadenante posterior de inserción definido en EMPLOYEE que origina inserciones adicionales en las tablas EMP_ACT y ACCT_LOG.

   CREATE TABLE EMPLOYEE
      (EMPNO SMALLINT GENERATED ALWAYS AS IDENTITY (START WITH 1000),
       NAME CHAR(30),
       SALARY DECIMAL(5,2),
       DEPTNO SMALLINT);
 
   CREATE TABLE EMP_ACT
      (ACNT_NUM SMALLINT GENERATED ALWAYS AS IDENTITY (START WITH 1),
       EMPNO SMALLINT);
 
   CREATE TABLE ACCT_LOG
      (ID SMALLINT GENERATED ALWAYS AS IDENTITY (START WITH 100),
       ACNT_NUM SMALLINT,
       EMPNO SMALLINT);
 
   CREATE TRIGGER NEW_HIRE
      AFTER INSERT ON EMPLOYEE
      REFERENCING NEW AS NEW_EMP
      FOR EACH ROW MODE DB2SQL
      BEGIN ATOMIC
         INSERT INTO EMP_ACT (EMPNO)
         VALUES (NEW_EMP.EMPNO);
         INSERT INTO ACCT_LOG (ACNT_NUM EMPNO)
         VALUES (IDENTITY_VAL_LOCAL(), NEW_EMP.EMPNO);
   END

La primera sentencia INSERT activada inserta una fila en la tabla EMP_ACT. Esta sentencia INSERT utiliza una variable de transición de desencadenante para la columna EMPNO de la tabla EMPLOYEE, para indicar que el valor de identidad de esa columna se debe copiar a la columna EMPNO de la tabla EMP_ACT. No se puede utilizar la función IDENTITY_VAL_LOCAL para obtener el valor asignado a la columna EMPNO de la tabla EMPLOYEE. Esto es debido a que la sentencia INSERT no se ha emitido al mismo nivel de anidamiento, y por tanto, si se invocara la función IDENTITY_VAL_LOCAL en la cláusula VALUES de la sentencia INSERT para EMP_ACT, se obtendría un valor nulo. Esta sentencia INSERT para la tabla EMP_ACT también genera un nuevo valor de identidad para la columna ACNT_NUM.

Una segunda sentencia INSERT activada inserta una fila en la tabla ACCT_LOG. Esta sentencia invoca la función IDENTITY_VAL_LOCAL para indicar que el valor de identidad asignado a la columna ACNT_NUM de la tabla EMP_ACT en la sentencia INSERT anterior de la acción activada se debe copiar a la columna ACNT_NUM de la tabla ACCT_LOG. A la columna EMPNO se le asigna el mismo valor que a la columna EMPNO de la tabla EMPLOYEE.

En el ejemplo siguiente, desde la aplicación invocadora (es decir, el nivel en el que se ejecuta INSERT para EMPLOYEE), la variable IVAR se establece en el valor asignado por la sentencia INSERT original a la columna EMPNO de la tabla EMPLOYEE.

   INSERT INTO EMPLOYEE (NAME, SALARY, DEPTNO)
   VALUES ('Rupert', 989.99, 50);

El contenido de las tres tablas después de procesar la sentencia INSERT original y todas las acciones activadas es el siguiente:

   SELECT EMPNO, SUBSTR(NAME,10) AS NAME, SALARY, DEPTNO
      FROM EMPLOYEE;
 
      EMPNO       NAME        SALARY                             DEPTNO
      ----------- ----------- ---------------------------------- -----------
             1000 Rupert                                  989.99          50
 
   SELECT ACNT_NUM, EMPNO
      FROM EMP_ACT;
 
      ACNT_NUM    EMPNO
      ----------- -----------
                1        1000
 
   SELECT * FROM ACCT_LOG;
 
      ID          ACNT_NUM    EMPNO
      ----------- ----------- -----------
              100           1        1000

El resultado de la función IDENTITY_VAL_LOCAL es el valor asignado más recientemente para una columna de identidad al mismo nivel de anidamiento. Después de procesar la sentencia INSERT original y todas las acciones activadas, la función IDENTITY_VAL_LOCAL devuelve el valor 1000, pues es el valor asignado a la columna EMPNO de la tabla EMPLOYEE. La sentencia VALUES siguiente asigna el valor 1000 a IVAR. La inserción en la tabla EMP_ACT (que se produjo después de la inserción en la tabla EMPLOYEE y a un nivel de anidamiento inferior) no afecta al resultado de esta invocación de la función IDENTITY_VAL_LOCAL.

VALUES IDENTITY_VAL_LOCAL() INTO :IVAR;

38.3.2.6 LCASE y UCASE (Unicode)

En una base de datos Unicode, el repertorio completo de caracteres Unicode está en mayúsculas (o en minúsculas) en función de las propiedades de Unicode de estos caracteres. Ahora, las versiones de doble anchura de los caracteres ASCII, así como los números romanos, se convierten correctamente en mayúsculas o minúsculas.

38.3.2.7 MQPUBLISH

>>-MQPUBLISH---(------------------------------------------------>
 
>-----+----------------------------------------------------+---->
      '-servicio-publicador--,--+-----------------------+--'
                                '-política-servicio--,--'
 
>----datos-mje----+----------------------------------+--)------><
                  '-,--tema--+--------------------+--'
                             |              (1)   |
                             '-,--id-correl-------'
 

Notas:

  1. El id-correl no se puede especificar a no ser que previamente se haya definido un servicio y una política.

El esquema es MQDB2.

La función MQPUBLISH publica datos ante MQSeries. Esta función requiere la instalación de MQSeries Publish/Subscribe o MQSeries Integrator. Consulte la dirección www.ibm.com/software/MQSeries para obtener más información.

La función MQPUBLISH publica los datos contenidos en datos-mje ante el publicador de MQSeries especificado en servicio-publicador y utiliza la calidad de política de servicio definida en política-servicio. Se puede especificar un tema opcional para el mensaje y también se puede especificar un identificador opcional de correlación de mensajes definidos por el usuario. La función devuelve el valor '1' si se ejecuta satisfactoriamente y '0' si no es así.

servicio-publicador
Una serie que contiene el destino lógico de MQSeries al que se debe enviar el mensaje. Si se especifica, el servicio-publicador debe hacer referencia a un Punto de servicio del publicador definido en el archivo de repositorio AMT.XML. Un punto de servicio es un punto final lógico desde el que se envía o en el que se recibe un mensaje. Las definiciones de puntos de servicio incluyen el nombre de MQSeries Queue Manager y de la cola. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica servicio-publicador, se utiliza DB2.DEFAULT.PUBLISHER. El tamaño máximo de servicio-publicador es 48 caracteres.

política-servicio
Una serie que contiene la política de servicio AMI de MQSeries que se va a utilizar para manejar este mensaje. Si se especifica, la política-servicio debe hacer referencia a una política definida en el archivo de repositorio AMT.XML. Una Política de servicio define una serie de opciones de calidad de servicio que se deben aplicar a esta operación de gestión de mensajes. Estas opciones incluyen prioridad y permanencia del mensaje. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica política-servicio, se utiliza DB2.DEFAULT.POLICY por omisión. El tamaño máximo de política-servicio es 48 caracteres.

datos-mje
Una expresión que contiene los datos que se van a enviar mediante MQSeries. El tamaño máximo es 4000 caracteres.

tema
Una expresión que contiene el tema correspondiente a la publicación del mensaje. Si no se especifica ningún tema, no se asociará ninguno al mensaje. El tamaño máximo de tema es 40 caracteres. Se pueden especificar varios temas en una serie (con una longitud máxima de 40 caracteres). Cada tema se debe separar por un signo de dos puntos. Por ejemplo, "t1:t2:tercer tema" indica que el mensaje se asocia con tres temas: t1, t2 y "tercer tema".

id-correl
Una expresión opcional que contiene un identificador de correlación que se asociará con este mensaje. El id-correl se suele especificar en escenarios de petición y respuesta para asociar peticiones con respuestas. Si no se especifica, no se añade ningún id de correlación al mensaje. El tamaño máximo de id-correl es 24 caracteres.

Ejemplos

Ejemplo 1: Este ejemplo publica la serie "Testing 123" al servicio publicador por omisión (DB2.DEFAULT.PUBLISHER) utilizando la política por omisión (DB2.DEFAULT.POLICY). No se especifica ningún identificador de correlación ni ningún tema para el mensaje.

VALUES MQPUBLISH('Testing 123')

Ejemplo 2: Este ejemplo publica la serie "Testing 345" al servicio publicador "MYPUBLISHER" bajo el tema "TESTS". Se utiliza la política por omisión y no se especifica ningún identificador de correlación.

VALUES MQPUBLISH('MYPUBLISHER','Testing 345', 'TESTS')

Ejemplo 3: Este ejemplo publica la serie "Testing 678" al servicio publicador "MYPUBLISHER" utilizando la política "MYPOLICY" con el identificador de correlación "TEST1". El mensaje se publica con el tema "TESTS".

VALUES MQPUBLISH('MYPUBLISHER','MYPOLICY','Testing 678','TESTS','TEST1')

Ejemplo 4: Este ejemplo publica la serie "Testing 901" al servicio publicador "MYPUBLISHER" bajo el tema "TESTS" utilizando la política por omisión (DB2.DEFAULT.POLICY) y sin identificador de correlación.

VALUES MQPUBLISH('Testing 901','TESTS')

Todos los ejemplos devuelven el valor '1' si se ejecutan satisfactoriamente.

38.3.2.8 MQREAD

>>-MQREAD---(--------------------------------------------------->
 
>-----+------------------------------------------------+--)----><
      '-servicio-recepción--+-----------------------+--'
                            '-,--política-servicio--'
 

El esquema es MQDB2.

La función MQREAD devuelve un mensaje procedente de la ubicación de MQSeries especificada por servicio-recepción, utilizando la política de calidad de servicio definida en política-servicio. Al ejecutar esta operación no se elimina el mensaje de la cola asociada con servicio-recepción, sino que se devuelve el mensaje al principio de la cola. El valor de retorno es un VARCHAR(4000) que contiene el mensaje. Si no hay ningún mensaje disponible que se pueda devolver, se devuelve un NULL.

servicio-recepción
Una serie que contiene el destino lógico de MQSeries desde el que se va a recibir el mensaje. Si se especifica, el servicio-recepción hace referencia a un Punto de servicio definido en el archivo de repositorio AMT.XML. Un punto de servicio es un punto final lógico desde el que se envía o en el que se recibe un mensaje. Las definiciones de puntos de servicio incluyen el nombre de MQSeries Queue Manager y de la cola. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica servicio-recepción, se utiliza DB2.DEFAULT.SERVICE. El tamaño máximo de servicio-recepción es 48 caracteres.

política-servicio
Una serie que contiene la política de servicio AMI de MQSeries utilizada para manejar este mensaje. Si se especifica, la política-servicio debe hacer referencia a una política definida en el archivo de repositorio AMT.XML. Una Política de servicio define una serie de opciones de calidad de servicio que se deben aplicar a esta operación de gestión de mensajes. Estas opciones incluyen prioridad y permanencia del mensaje. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica política-servicio, se utiliza DB2.DEFAULT.POLICY por omisión. El tamaño máximo de política-servicio es 48 caracteres.

Ejemplos:

Ejemplo 1: Este ejemplo lee el mensaje que hay al principio de la cola especificada por el servicio por omisión (DB2.DEFAULT.SERVICE), utilizando la política por omisión (DB2.DEFAULT.POLICY).

VALUES MQREAD()

Ejemplo 2: Este ejemplo lee el mensaje que hay al principio de la cola especificada por el servicio "MYSERVICE" utilizando la política por omisión (DB2.DEFAULT.POLICY).

VALUES MQREAD('MYSERVICE')

Ejemplo 3: Este ejemplo lee el mensaje que hay al principio de la cola especificada por el servicio "MYSERVICE" utilizando la política "MYPOLICY".

VALUES MQREAD('MYSERVICE','MYPOLICY')

Todos estos ejemplos devuelven el contenido del mensaje como VARCHAR(4000) si se ejecutan satisfactoriamente. Si no hay mensajes disponibles, se devuelve un NULL.

38.3.2.9 MQRECEIVE

>>-MQRECEIVE---------------------------------------------------->
 
>----(--+-------------------------------------------------------------------+---)->
        '-servicio-recepción--+------------------------------------------+--'
                              '-,--política-servicio--+---------------+--'
                                                      '-,--id-correl--'
 
>--------------------------------------------------------------><
 

El esquema es MQDB2.

La función MQRECEIVE devuelve un mensaje procedente de la ubicación de MQSeries especificada por servicio-recepción, utilizando la política de calidad de servicio política-servicio. Al llevar a cabo esta operación se elimina el mensaje de la cola asociada con servicio-recepción. Si se especifica id-correl, se devuelve el primer mensaje con un identificador de correlación que coincida. Si no se especifica correl-id, se devuelve el primer mensaje de la cola. El valor de retorno es un VARCHAR(4000) que contiene el mensaje. Si no hay ningún mensaje disponible que se pueda devolver, se devuelve un NULL.

servicio-recepción
Una serie que contiene el destino lógico de MQSeries desde el que se recibe el mensaje. Si se especifica, el servicio-recepción hace referencia a un Punto de servicio definido en el archivo de repositorio AMT.XML. Un punto de servicio es un punto final lógico desde el que se envía o en el que se recibe un mensaje. Las definiciones de puntos de servicio incluyen el nombre de MQSeries Queue Manager y de la cola. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica servicio-recepción, se utiliza DB2.DEFAULT.SERVICE. El tamaño máximo de servicio-recepción es 48 caracteres.

política-servicio
Una serie que contiene la política de servicio AMI de MQSeries que se va a utilizar para manejar este mensaje. Si se especifica, la política-servicio debe hacer referencia a una Política definida en el archivo de repositorio AMT XML 4 . Si no se especifica política-servicio, se utiliza DB2.DEFAULT.POLICY por omisión. El tamaño máximo de política-servicio es 48 caracteres.

id-correl
Serie que contiene un identificador de correlación opcional que se va a asociar con este mensaje. El id-correl se suele especificar en escenarios de petición y respuesta para asociar peticiones con respuestas. Si no se especifica, no se especifica ningún id de correlación. El tamaño máximo de id-correl es 24 caracteres.

Ejemplos:

Ejemplo 1: Este ejemplo recibe el mensaje que hay al principio de la cola especificada por el servicio por omisión (DB2.DEFAULT.SERVICE), utilizando la política por omisión (DB2.DEFAULT.POLICY).

VALUES MQRECEIVE()

Ejemplo 2: Este ejemplo recibe el mensaje que hay al principio de la cola especificada por el servicio "MYSERVICE" utilizando la política por omisión (DB2.DEFAULT.POLICY).

VALUES MQRECEIVE('MYSERVICE')

Ejemplo 3: Este ejemplo recibe el mensaje que hay al principio de la cola especificada por el servicio "MYSERVICE" utilizando la política "MYPOLICY".

VALUES MQRECEIVE('MYSERVICE','MYPOLICY')

Ejemplo 4: Este ejemplo recibe el primer mensaje con el id de correlación que coincida con '1234' del principio de la cola especificada por el servicio "MYSERVICE" utilizando la política "MYPOLICY".

VALUES MQRECEIVE('MYSERVICE',MYPOLICY','1234')

Todos estos ejemplos devuelven el contenido del mensaje como a VARCHAR(4000) si se ejecutan satisfactoriamente. Si no hay mensajes disponibles, se devuelve un NULL.

38.3.2.10 MQSEND

>>-MQSEND---(--------------------------------------------------->
 
>-----+-----------------------------------------------+--------->
      '-servicio-envío--,--+-----------------------+--'
                           '-política-servicio--,--'
 
>----datos-mje----+--------------------+--)--------------------><
                  |              (1)   |
                  '-,--id-correl-------'
 

Notas:

  1. El id-correl no se puede especificar a no ser que previamente se haya definido un servicio y una política.

El esquema es MQDB2.

La función MQSEND envía los datos contenidos en datos-mje a la ubicación de MQSeries especificada por servicio-envío, utilizando la política de calidad de servicio definida por política-servicio. Se puede especificar un identificador opcional de correlación de mensaje definido por el usuario mediante id-correl. La función devuelve el valor '1' si se ejecuta satisfactoriamente y '0' si no es así.

datos-mje
Una expresión que contiene los datos que se van a enviar mediante MQSeries. El tamaño máximo es 4000 caracteres.

servicio-envío
Una serie que contiene el destino lógico de MQSeries al que se debe enviar el mensaje. Si se especifica, el servicio-envío hace referencia a un punto de servicio definido en el archivo de repositorio AMT.XML. Un punto de servicio es un punto final lógico desde el que se envía o en el que se recibe un mensaje. Las definiciones de puntos de servicio incluyen el nombre de MQSeries Queue Manager y de la cola. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica servicio-envío, se utiliza el valor de DB2.DEFAULT.SERVICE. El tamaño máximo de servicio-envío es 48 caracteres.

política-servicio
Una serie que contiene la política de servicio AMI de MQSeries utilizada para manejar este mensaje. Si se especifica, la política-servicio debe hacer referencia a una política definida en el archivo de repositorio AMT XML. Una Política de servicio define una serie de opciones de calidad de servicio que se deben aplicar a esta operación de gestión de mensajes. Estas opciones incluyen prioridad y permanencia del mensaje. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica política-servicio, se utiliza el valor por omisión DB2.DEFAULT.POLICY. El tamaño máximo de política-servicio es 48 caracteres.

id-correl
Una serie opcional que contiene un identificador de correlación asociado con este mensaje. El id-correl se suele especificar en escenarios de petición y respuesta para asociar peticiones con respuestas. Si no se especifica, no se envía ningún id de correlación. El tamaño máximo de id-correl es 24 caracteres.

Ejemplos:

Ejemplo 1: Este ejemplo envía la serie "Testing 123" al servicio por omisión (DB2.DEFAULT.SERVICE), utilizando la política por omisión (DB2.DEFAULT.POLICY), sin identificador de correlación.

VALUES MQSEND('Testing 123')

Ejemplo 2: Este ejemplo envía la serie "Testing 345" al servicio "MYSERVICE", utilizando la política "MYPOLICY", sin identificador de correlación.

VALUES MQSEND('MYSERVICE','MYPOLICY','Testing 345')

Ejemplo 3: Este ejemplo envía la serie "Testing 678" al servicio "MYSERVICE", utilizando la política "MYPOLICY", con el identificador de correlación "TEST3".

VALUES MQSEND('MYSERVICE','MYPOLICY','Testing 678','TEST3')

Ejemplo 4: Este ejemplo envía la serie "Testing 901" al servicio "MYSERVICE", utilizando la política por omisión (DB2.DEFAULT.POLICY), y sin identificador de correlación.

VALUES MQSEND('MYSERVICE','Testing 901')

Todos los ejemplos devuelven el valor escalar '1' si se ejecutan satisfactoriamente.

38.3.2.11 MQSUBSCRIBE

>>-MQSUBSCRIBE---(---------------------------------------------->
 
>-----+----------------------------------------------------+---->
      '-servicio-suscriptor--,--+-----------------------+--'
                                '-política-servicio--,--'
 
>----tema---)--------------------------------------------------><
 

El esquema es MQDB2.

La función MQSUBSCRIBE sirve para registrar interés en mensajes de MQSeries publicados sobre un tema específico. El servicio-suscriptor especifica un destino lógico para los mensajes que coinciden con el tema especificado. Los mensajes que coinciden con tema se colocan en la cola definida por servicio-suscriptor y se pueden leer o recibir a través de una llamada a MQREAD, MQRECEIVE, MQREADALL o MQRECEIVEALL. Esta función requiere la instalación y configuración de un sistema de publicación y suscripción basado en MQSeries, como MQSeries Integrator o MQSeries Publish/Subscribe. Consulte el sitio www.ibm.com/software/MQSeries para obtener más información.

La función devuelve el valor '1' si se ejecuta satisfactoriamente y '0' si no es así. Si la función se ejecuta satisfactoriamente, el servidor de publicación y suscripción envía los mensajes que coinciden con el tema al punto de servicio definido por servicio-suscriptor.

servicio-suscriptor
Una serie que contiene el punto lógico de suscripción de MQSeries al que se enviarán los mensajes que coincidan con tema. Si se especifica, el servicio-suscriptor debe hacer referencia al Punto de servicio de suscriptores definido en el archivo de repositorio AMT.XML. Las definiciones de puntos de servicio incluyen el nombre de MQSeries Queue Manager y de la cola. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica servicio-suscriptor, se utiliza DB2.DEFAULT.SUBSCRIBER. El tamaño máximo del servicio-suscriptor es 48 caracteres.

política-servicio
Una serie que contiene la política de servicio AMI de MQSeries que se va a utilizar para manejar el mensaje. Si se especifica, la política-servicio debe hacer referencia a una política definida en el archivo de repositorio AMT.XML. Una Política de servicio define una serie de opciones de calidad de servicio que se deben aplicar a esta operación de gestión de mensajes. Estas opciones incluyen prioridad y permanencia del mensaje. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica política-servicio, se utiliza DB2.DEFAULT.POLICY por omisión. El tamaño máximo de política-servicio es 48 caracteres.

tema
Una serie que define los tipos de mensajes que se van a recibir. Esta suscripción sólo recibirá los mensajes publicados con los temas especificados. Pueden coexistir varias suscripciones. El tamaño máximo de tema es 40 caracteres. Se pueden especificar varios temas en una serie (con una longitud máxima de 40 caracteres). Cada tema se debe separar por un signo de dos puntos. Por ejemplo, "t1:t2:tercer tema" indica que el mensaje se asocia con tres temas: t1, t2 y "tercer tema".

Ejemplos:

Ejemplo 1: Este ejemplo registra un interés en los mensajes que contienen el tema "Weather". El servicio-suscriptor por omisión (DB2.DEFAULT.SUBSCRIBER) se registra como el suscriptor y la política-servicio por omisión (DB2.DEFAULT.POLICY) especifica la calidad de servicio.

VALUES MQSUBSCRIBE('Weather')

Ejemplo 2: Este ejemplo muestra un suscriptor que registra interés en mensajes que contienen el tema "Stocks". El suscriptor se registra como "PORTFOLIO-UPDATES" con la política "BASIC-POLICY".

VALUES MQSUBSCRIBE('PORTFOLIO-UPDATES','BASIC-POLICY','Stocks')

Todos los ejemplos devuelven el valor escalar '1' si se ejecutan satisfactoriamente.

38.3.2.12 MQUNSUBSCRIBE

>>-MQUNSUBSCRIBE---(-------------------------------------------->
 
>-----+----------------------------------------------------+---->
      '-servicio-suscriptor--,--+-----------------------+--'
                                '-política-servicio--,--'
 
>----tema---)--------------------------------------------------><
 

El esquema es MQDB2.

La función MQUNSUBSCRIBE sirve para eliminar el registro de una suscripción existente de mensajes. El servicio-suscriptor, la política-servicio y el tema sirven para identificar qué suscripción se cancela. Esta función requiere la instalación y configuración de un sistema de publicación y suscripción basado en MQSeries, como MQSeries Integrator o MQSeries Publish/Subscribe. Consulte el sitio www.ibm.com/software/MQSeries para obtener más información.

La función devuelve el valor '1' si se ejecuta satisfactoriamente y '0' si no es así. El resultado de la ejecución satisfactoria de esta función es que el servidor de publicación y suscripción elimina la suscripción definida por los parámetros especificados. Los mensajes con el tema especificado dejan de enviarse al destino lógico definido por servicio-suscripción.

servicio-suscriptor
Si se especifica, el servicio-suscriptor debe hacer referencia al Punto de servicio de suscriptores definido en el archivo de repositorio AMT.XML. Las definiciones de puntos de servicio incluyen el nombre de MQSeries Queue Manager y de la cola. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica servicio-suscripción, se utiliza el valor DB2.DEFAULT.SUBSCRIBER. El tamaño máximo de servicio-suscriptor es 48 caracteres.

política-servicio
Si se especifica, la política-servicio debe hacer referencia a una política definida en el archivo de repositorio AMT.XML. Una Política de servicio define una serie de opciones de calidad de servicio que se deben aplicar a esta operación de gestión de mensajes. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica política-servicio, se utiliza DB2.DEFAULT.POLICY por omisión. El tamaño máximo de política-servicio es 48 caracteres.

tema
Una serie que especifica el tema de los mensajes que no se tienen que recibir. El tamaño máximo de tema es 40 caracteres. Se pueden especificar varios temas en una serie (con una longitud máxima de 40 caracteres). Cada tema se debe separar por un signo de dos puntos. Por ejemplo, "t1:t2:tercer tema" indica que el mensaje se asocia con tres temas: t1, t2 y "tercer tema".

Ejemplos:

Ejemplo 1: Este ejemplo cancela un interés en los mensajes que contienen el tema "Weather". El servicio-suscriptor por omisión (DB2.DEFAULT.SUBSCRIBER) se registra como el anulador del suscriptor y la política-servicio por omisión (DB2.DEFAULT.POLICY) especifica la calidad de servicio.

VALUES MQUNSUBSCRIBE('Weather')

Ejemplo 2: Este ejemplo muestra un suscriptor que cancela un interés en mensajes que contienen el tema "Stocks". El suscriptor se registra como "PORTFOLIO-UPDATES" con la política "BASIC-POLICY".

VALUES MQUNSUBSCRIBE('PORTFOLIO-UPDATES','BASIC-POLICY','Stocks')

Estos ejemplos devuelven el valor escalar '1' si se ejecutan satisfactoriamente y el valor escalar '0' si no es así.

38.3.2.13 MULTIPLY_ALT

>>-MULTIPLY_ALT------------------------------------------------->
 
>----(expresión_numérica_exacta, expresión_numérica_exacta)-----><
 

El esquema es SYSIBM.

Esta función apareció por primera vez en el FixPack 2 de la Versión 7.1.

La función escalar MULTIPLY_ALT devuelve el producto de los dos argumentos como valor decimal. Se proporciona como alternativa al operador de multiplicación, especialmente cuando la suma de las precisiones de los argumentos es mayor que 31.

Los argumentos pueden ser cualquier tipo de datos numéricos exactos internos (DECIMAL, BIGINT, INTEGER o SMALLINT).

El resultado de la función es un DECIMAL. La precisión y escala del resultado se determinan del siguiente modo, utilizando los símbolos p y s para denotar la precisión y escala del primer argumento, y los símbolos p' y s' para denotar la precisión y escala del segundo argumento.

El resultado puede ser nulo si al menos un argumento puede ser nulo o la base de datos se configura con DFT_SQLMATHWARN establecido en sí; el resultado es el valor nulo si uno de los argumentos es un nulo.

La función MULTIPLY_ALT es una opción mejor que el operador de multiplicación al efectuar la aritmética decimal en los lugares en los que se necesite una escala de 3 como mínimo y la suma de las precisiones supere 31. En estos casos, el cálculo interno se efectúa de modo que se eviten los desbordamientos. Entonces el resultado final se asigna al tipo de datos resultado utilizando el truncamiento en los lugares en los que sea necesario para que se corresponda con la escala. Tenga en cuenta que el desbordamiento del resultado final sigue siendo posible cuando la escala sea 3.

Lo que viene a continuación es un ejemplo de la comparación de tipos de resultados utilizando MULTIPLY_ALT y el operador de multiplicación.
Tipo de argumento 1 Tipo de argumento 2 Resultado utilizando MULTIPLY_ALT Resultado utilizando el operador de multiplicación
DECIMAL(31,3) DECIMAL(15,8) DECIMAL(31,3) DECIMAL(31,11)
DECIMAL(26,23) DECIMAL(10,1) DECIMAL(31,19) DECIMAL(31,24)
DECIMAL(18,17) DECIMAL(20,19) DECIMAL(31,29) DECIMAL(31,31)
DECIMAL(16,3) DECIMAL(17,8) DECIMAL(31,9) DECIMAL(31,11)
DECIMAL(26,5) DECIMAL(11,0) DECIMAL(31,3) DECIMAL(31,5)
DECIMAL(21,1) DECIMAL(15,1) DECIMAL(31,2) DECIMAL(31,2)
Ejemplo:

Multiplique dos valores en los que el tipo de datos del primer argumento sea DECIMAL(26, 3) y el tipo de datos del segundo argumento sea DECIMAL(9,8). El tipo de datos del resultado es DECIMAL(31,7).

values multiply_alt(98765432109876543210987.654,5.43210987)
1
---------------------------------
 536504678578875294857887.5277415

Tenga en cuenta que el producto completo de estos dos números es 536504678578875294857887.52774154498 pero los 4 últimos dígitos se truncaron para corresponderse con la escala del tipo de datos de resultado. La utilización del operador de multiplicación con los mismos valores da como resultado un desbordamiento aritmético ya que el tipo de datos del resultado es DECIMAL(31,11) y el valor del resultado tiene 24 dígitos a la izquierda del decimal, pero el tipo de datos del resultado sólo da soporte a 20 dígitos.

38.3.2.14 REC2XML

>>-REC2XML---(--constante-decimal---,--serie-formato------------>
 
>----,--serie-identificador-fila-------------------------------->
 
>-----+---------------------------+--)-------------------------><
      |  .---------------------.  |
      |  V                     |  |
      '----,--nombre-columna---+--'
 

El esquema es SYSIBM.

La función REC2XML devuelve una serie formateada con identificadores XML que contiene nombres de columnas y valores de columnas.

constante-decimal
El factor de expansión para sustituir caracteres de valores de columnas. El valor decimal debe ser mayor que 0.0 y menor o igual que 6.0 (SQLSTATE 42820).

El valor constante-decimal sirve para calcular la longitud del resultado de la función. Para cada columna con un tipo de datos carácter, el atributo de longitud de la columna se multiplica por el factor de expansión antes de que se añada a la longitud del resultado.

Para especificar que no hay expansión, utilice el valor 1.0. Al especificar un valor menor que 1.0 se reduce la longitud calculada del resultado. Si la longitud real de la serie del resultado es mayor que la longitud calculada del resultado de la función, se devuelve un error (SQLSTATE 22001).

serie-formato
La constante de serie que especifica qué formato debe utilizar la función durante la ejecución.

La serie-formato es sensible a mayúsculas y minúsculas, de modo que los siguientes valores se deben especificar en mayúsculas para que se reconozcan.

COLATTVAL o COLATTVAL_XML
Estos formatos devuelven una serie con columnas como valores de atributo.
>>-<--serie-identificador-fila-->------------------------------->
 
      .-----------------------------------------------------------------------------.
      V                                                                             |
>--------<--column-name--=--"nombre-columna"--+->--valor-columna--</--column-->--+--+>
                                              '-null="true"--</------------------'
 
>----</--serie-identificador-fila-->---------------------------><
 

Los nombres de columnas pueden o no ser valores de atributos XML válidos. Para los nombres de columnas que no son valores de atributos XML válidos, se sustituyen caracteres en el nombre de columna antes de incluirlo en la serie del resultado.

Los valores de columnas pueden o no ser valores de elementos XML válidos. Si se especifica la serie-formato COLATTVAL, para los valores de columnas que no son valores de elementos XML válidos, se sustituyen caracteres en el valor de columna antes de que se incluya en la serie del resultado. Si se especifica la serie-formato COLATTVAL_XML, no se sustituyen caracteres en los valores de columnas (observe que se siguen sustituyendo caracteres en los nombres de columnas).

serie-identificador-fila
Una constante de serie que especifica el identificador utilizado para cada fila.

Si se especifica una serie vacía, se utiliza el valor 'row'.

Si se especifica una serie con uno o más caracteres en blanco, no aparecerá ninguna serie-identificador-fila inicial ni serie-identificador-fila final (incluidos los delimitadores formatos por signos de mayor o menor que).

nombre-columna
Un nombre calificado o no calificado de una columna de tabla. La columna debe tener uno de los siguientes tipos de datos (SQLSTATE 42815):

No se puede especificar el mismo nombre de columna más de una vez (SQLSTATE 42734).

El resultado de la función VARCHAR. La longitud máxima es 32672 bytes (SQLSTATE 54006).

Supongamos que tenemos la siguiente invocación:

   REC2XML (dc, fs, rt, c1, c2, ..., cn)

Si el valor de fs es "COLATTVAL" o "COLATTVAL_XML"
el resultado es el mismo que el de la siguiente expresión:
   '<' CONCAT rt CONCAT '>' CONCAT y1 CONCAT y2 CONCAT ... CONCAT yn
   CONCAT '</' CONCAT rt CONCAT '>'

donde yn equivale a:

   '<column name="' CONCAT xvcn CONCAT vn

y vn equivale a:

   '">' CONCAT rn CONCAT '</column>'

si la columna no es nula, y

   '" null="true"/>'

si el valor de la columna es un nulo.

xvcn equivale a una representación de una serie del nombre de la columna de cn, donde los caracteres que aparecen en la Tabla 29 se sustituyen por la representación correspondiente. Esto asegura que la serie resultante es un atributo XML válido o un símbolo de valor de elemento.

rn equivale a una representación de una serie, tal como se indica en la Tabla 28.

Valores de columnas de resultados:

Según el tipo de datos de la columna y la serie-formato especificada, es posible que los valores de columnas de la tabla se transformen antes de concatenarse en la serie del resultado. La tabla siguiente muestra las transformaciones realizadas en los valores de columnas.

Tabla 28. Resultado de series de valores de columnas
Tipo de datos cn rn
CHAR, VARCHAR El valor es una serie. Si la serie-formato no termina con los caracteres "_XML", cada carácter de cn se sustituye por la representación de sustitución correspondiente de la Tabla 29, tal como se indica. El atributo de longitud es: dc * el atributo de longitud de cn.
SMALLINT, INTEGER, BIGINT, DECIMAL, NUMERIC, REAL, DOUBLE El valor es LTRIM(RTRIM(CHAR(cn))). El atributo de longitud es la longitud resultante de CHAR(cn). El carácter decimal siempre es el carácter de punto.
DATE El valor es CHAR(cn, ISO). El atributo de longitud es la longitud resultante de CHAR(cn, ISO).
TIME El valor es CHAR(cn, JIS). El atributo de longitud es la longitud resultante de CHAR(cn, JIS)
TIMESTAMP El valor es CHAR(cn). El atributo de longitud es la longitud resultante de CHAR(cn).

Sustitución de caracteres:

Según el valor especificado para la serie-formato, algunos caracteres de nombres de columnas y valores de columnas se sustituirán para asegurar que los nombres de columnas forman valores de atributos XML válidos y que los valores de columnas forman valores de elementos XML válidos.


Tabla 29. Sustitución de caracteres para valores de elementos y valores de atributos XML
< se sustituye por &lt;
> se sustituye por &gt;
" se sustituye por &quot;
& se sustituye por &amp;
' se sustituye por &apos;

Ejemplos:

38.3.2.15 ROUND

>>-ROUND---(expresión1, expresión2)----------------------------><
 

El esquema es SYSIBM.

Esta función apareció por primera vez en el FixPack 2 de la Versión 7.1.

Nota:
La versión SYSFUN de la función ROUND continúa estando disponible.

La función ROUND devuelve expresión1 redondeada a expresión2 lugares a la derecha de la coma decimal si expresión2 es positivo o a la izquierda de la coma decimal si expresión2 es cero o negativo.

Si expresión1 es positivo, se redondea un valor de 5 al siguiente número positivo superior. Por ejemplo, ROUND(3.5,0) = 4. Si expresión1 es negativo, se redondea un valor de 5 al siguiente número negativo inferior. Por ejemplo, ROUND(-3.5,0) = -4.

expresión1
Una expresión que devuelve un valor de cualquier tipo de datos numérico incorporado.

expresión2
Una expresión que devuelve un entero pequeño o grande. Cuando el valor de expresión2 no sea negativo, especifica el redondeo en ese número de lugares a la derecha del separador decimal. Cuando el valor de expresión2 sea negativo, especifica el redondeo al valor absoluto de expresión2 lugares a la derecha del separador decimal.

Si expresión2 no es negativo, expresión1 se redondea al valor absoluto de expresión2 número de lugares a la derecha de la coma decimal. Si el valor de expresión2 es mayor que la escala de expresión1 el valor no se modifica, excepto cuando el valor de resultado tiene una precisión que la supere en 1. Por ejemplo, ROUND(748.58,5) = 748.58 donde la precisión es 6 en este momento y la escala permanece en 2.

Si expresión2 es negativo, expresión1 se redondea al valor absoluto de expresión2+1 número de lugares a la izquierda de la coma decimal.

Si el valor absoluto de un expresión2 negativo supera el número de dígitos a la izquierda de la coma decimal, el resultado es 0. Por ejemplo, ROUND(748.58,-4) = 0.

El tipo de datos y el atributo de longitud del resultado son iguales al tipo de datos y atributo de longitud del primer argumento, excepto que la precisión aumenta en uno si la expresión1 es DECIMAL o NUMERIC y la precisión es inferior a 31. Por ejemplo, un argumento con un tipo de datos de DECIMAL(5,2) da como resultado DECIMAL(6,2). Un argumento con un tipo de datos de DECIMAL(31,2) da como resultado DECIMAL(31,2). La escala es la misma que la escala del primer argumento.

Si el argumento puede ser nulo o la base de datos se configura con DFT_SQLMATHWARN establecido en sí, el resultado puede ser nulo. Si uno de los dos argumentos es nulo, el resultado es el valor nulo.

Ejemplos:

Calcule el número 873.726 redondeado a 2, 1, 0, -1, -2, -3 y -4 lugares decimales respectivamente.

    VALUES (ROUND(873.726, 2),
            ROUND(873.726, 1),
            ROUND(873.726, 0),
            ROUND(873.726,-1),
            ROUND(873.726,-2),
            ROUND(873.726,-3),
            ROUND(873.726,-4) )

Este ejemplo devuelve:

1         2         3         4         5         6         7
--------- --------- --------- --------- --------- --------- ---------
  873.730   873.700   874.000   870.000   900.000  1000.000  0.000

Calcule los números positivos y negativos.

    VALUES (ROUND(3.5, 0),
            ROUND(3.1, 0),
            ROUND(-3.1, 0),
            ROUND(-3.5,0) )

Este ejemplo devuelve:

     1    2    3    4
     ---- ---- ---- ----
      4.0  3.0 -3.0 -4.0

38.3.2.16 WEEK_ISO

Cambie la descripción de esta función por la siguiente:

El esquema es SYSFUN.

Devuelve la semana del año del argumento como un valor entero en el rango 1-53. La semana empieza por lunes y siempre incluye 7 días. La semana 1 es la primera semana del año que contiene un jueves, lo que equivale a la primera semana que contiene 4 de enero. Por lo tanto, puede que un hasta 3 días al principio de un año aparezcan en la última semana del año anterior. Por el contrario, puede que hasta 3 días del final de un año aparezcan en la primera semana del año siguiente.

El argumento debe ser una fecha, una indicación horaria o una representación de serie de caracteres válida de una fecha o indicación horaria, que no puede ser CLOB ni LONG VARCHAR.

El resultado de la función es INTEGER. El resultado puede ser nulo; si el argumento es nulo, el resultado es el valor nulo.

Ejemplo:

La lista siguiente muestra ejemplos del resultado de WEEK_ISO y DAYOFWEEK_ISO.

DATE       WEEK_ISO    DAYOFWEEK_ISO
---------- ----------- -------------    
1997-12-28          52             7
1997-12-31           1             3
1998-01-01           1             4
1999-01-01          53             5
1999-01-04           1             1
1999-12-31          52             5
2000-01-01          52             6
2000-01-03           1             1

38.3.3 Funciones de tabla

38.3.3.1 MQREADALL

>>-MQREADALL---(------------------------------------------------>
 
>-----+------------------------------------------------+-------->
      '-servicio-recepción--+-----------------------+--'
                            '-,--política-servicio--'
 
>-----+------------+--)----------------------------------------><
      '-núm-filas--'
 

El esquema es MQDB2.

La función MQREADALL devuelve una tabla que contiene los mensajes y metadatos de mensajes procedentes de la ubicación de MQSeries especificada por servicio-recepción, utilizando la política de calidad de servicio política-servicio. Al realizar esta operación no se eliminan los mensajes de la cola asociada con servicio-recepción.

Si se especifica núm-filas, se devolverá un máximo de núm-filas mensajes. Si no se especifica núm-filas, se devolverán todos los mensajes disponibles. La tabla devuelta contiene las siguientes columnas:

servicio-recepción
Una serie que contiene el destino lógico de MQSeries del que se lee el mensaje. Si se especifica, el servicio-recepción debe hacer referencia a un punto de servicio definido en el archivo de repositorio AMT.XML. Un punto de servicio es un punto final lógico desde el que se envía o en el que se recibe un mensaje. Las definiciones de puntos de servicio incluyen el nombre de MQSeries Queue Manager y de la cola. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica servicio-recepción, se utilizará DB2.DEFAULT.SERVICE. El tamaño máximo de servicio-recepción es 48 caracteres.

política-servicio
Una serie que contiene la política de servicio AMI de MQSeries que se utiliza para manejar este mensaje. Si se especifica, la política-servicio hace referencia a una política definida en el archivo de repositorio AMT.XML. Una política de servicio define una serie de opciones de calidad de servicio que se deben aplicar a esta operación de gestión de mensajes. Estas opciones incluyen prioridad y permanencia del mensaje. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica política-servicio, se utiliza DB2.DEFAULT.POLICY por omisión. El tamaño máximo de política-servicio es 48 caracteres.

núm-filas
Un entero positivo que contiene el número máximo de mensajes que devolverá la función.

Ejemplos:

Ejemplo 1: Este ejemplo recibe todos los mensajes procedentes de la cola especificada por el servicio por omisión (DB2.DEFAULT.SERVICE), utilizando la política por omisión (DB2.DEFAULT.POLICY). Los mensajes y todos los metadatos se devuelven como una tabla.

SELECT *
   FROM table (MQREADALL()) T

Ejemplo 2: Este ejemplo recibe todos los mensajes procedentes del principio de la cola especificada por el servicio MYSERVICE, utilizando la política por omisión (DB2.DEFAULT.POLICY). Sólo se devuelven las columnas MSG y CORRELID.

SELECT T.MSG, T.CORRELID
   FROM table (MQREADALL('MYSERVICE')) T

Ejemplo 3: Este ejemplo lee el principio de la cola especificada por el servicio por omisión (DB2.DEFAULT.SERVICE), utilizando la política por omisión (DB2.DEFAULT.POLICY). Sólo se devuelven los mensajes con un CORRELID de '1234'. Se devuelven todas las columnas.

SELECT *
   FROM table (MQREADALL()) T
   WHERE T.CORRELID = '1234'

Ejemplo 4: Este ejemplo recibe los 10 primeros mensajes del principio de la cola especificada por el servicio por omisión (DB2.DEFAULT.SERVICE), utilizando la política por omisión (DB2.DEFAULT.POLICY). Se devuelven todas las columnas.

SELECT *
   FROM table (MQREADALL(10)) T

38.3.3.2 MQRECEIVEALL

>>-MQRECEIVEALL---(--------------------------------------------->
 
>-----+-------------------------------------------------------------------+>
      '-servicio-recepción--+------------------------------------------+--'
                            '-,--política-servicio--+---------------+--'
                                                    '-,--id-correl--'
 
>-----+---------------------+--)-------------------------------><
      '-+----+---núm-filas--'
        '-,--'
 

El esquema es MQDB2.

La función MQRECEIVEALL devuelve una tabla que contiene los mensajes y metadatos de mensajes procedentes de la ubicación de MQSeries especificada por servicio-recepción, utilizando la política de calidad de servicio política-servicio. Al realizar esta operación se eliminan los mensajes de la cola asociada con servicio-recepción.

Si se especifica un id-correl, sólo se devuelven los mensajes con un identificador de correlación que coincida. Si no se especifica correl-id, se devuelve el primer mensaje de la cola.

Si se especifica núm-filas, se devolverá un máximo de núm-filas mensajes. Si no se especifica núm-filas, se devolverán todos los mensajes disponibles. La tabla devuelta contiene las siguientes columnas:

servicio-recepción
Una serie que contiene el destino lógico de MQSeries del que se recibe el mensaje. Si se especifica, el servicio-recepción debe hacer referencia a un punto de servicio definido en el archivo de repositorio AMT.XML. Un punto de servicio es un punto final lógico desde el que se envía o en el que se recibe un mensaje. Las definiciones de puntos de servicio incluyen el nombre de MQSeries Queue Manager y de la cola. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica servicio-recepción, se utilizará DB2.DEFAULT.SERVICE. El tamaño máximo de servicio-recepción es 48 caracteres.

política-servicio
Una serie que contiene la política de servicio AMI de MQSeries que se utiliza para manejar este mensaje. Si se especifica, la política-servicio hace referencia a una política definida en el archivo de repositorio AMT.XML. Una política de servicio define una serie de opciones de calidad de servicio que se deben aplicar a esta operación de gestión de mensajes. Estas opciones incluyen prioridad y permanencia del mensaje. Consulte el manual MQSeries Application Messaging Interface para obtener más información. Si no se especifica política-servicio, se utiliza DB2.DEFAULT.POLICY por omisión. El tamaño máximo de política-servicio es 48 caracteres.

id-correl
Una serie opcional que contiene un identificador de correlación asociado con este mensaje. El id-correl se suele especificar en escenarios de petición y respuesta para asociar peticiones con respuestas. Si no se especifica, no se especifica ningún id de correlación. El tamaño máximo de id-correl es 24 caracteres.

núm-filas
Un entero positivo que contiene el número máximo de mensajes que devolverá la función.

Ejemplos:

Ejemplo 1: Este ejemplo recibe todos los mensajes procedentes de la cola especificada por el servicio por omisión (DB2.DEFAULT.SERVICE), utilizando la política por omisión (DB2.DEFAULT.POLICY). Los mensajes y todos los metadatos se devuelven como una tabla.

SELECT *
   FROM table (MQRECEIVEALL()) T

Ejemplo 2: Este ejemplo recibe todos los mensajes procedentes del principio de la cola especificada por el servicio MYSERVICE, utilizando la política por omisión (DB2.DEFAULT.POLICY). Sólo se devuelven las columnas MSG y CORRELID.

SELECT T.MSG, T.CORRELID
   FROM table (MQRECEIVEALL('MYSERVICE')) T

Ejemplo 3: Este ejemplo recibe todos los mensajes del principio de la cola especificada por el servicio "MYSERVICE", utilizando la política "MYPOLICY". Sólo se devuelven los mensajes con un CORRELID de '1234'. Sólo se devuelven las columnas MSG y CORRELID.

SELECT T.MSG, T.CORRELID
   FROM table (MQRECEIVEALL('MYSERVICE','MYPOLICY','1234')) T
  

Ejemplo 4: Este ejemplo recibe los 10 primeros mensajes del principio de la cola especificada por el servicio por omisión (DB2.DEFAULT.SERVICE), utilizando la política por omisión (DB2.DEFAULT.POLICY). Se devuelven todas las columnas.

SELECT *
   FROM table (MQRECEIVEALL(10)) T

38.3.4 Procedimientos

38.3.4.1 GET_ROUTINE_SAR

>>-GET_ROUTINE_SAR---(--sarblob--,--tipo--,--nombre_rutina--)--><
 

El esquema es SYSFUN.

Este procedimiento apareció por primera vez en el FixPack 3 de la Versión 7.1.

El procedimiento GET_ROUTINE_SAR recupera la información necesaria para instalar la misma rutina en otro servidor de bases de datos que ejecuta el mismo nivel en el mismo sistema operativo. La información que se recupera forma una serie de caracteres BLOB individual que representa un archivo archivador de SQL. La persona que invoca el procedimiento GET_ROUTINE_SAR debe tener autorización DBADM.

sarblob
Argumento de salida del tipo BLOB(3M) donde se guarda el contenido del archivo SAR de la rutina.

tipo
Argumento de entrada del tipo CHAR(2) que especifica el tipo de rutina, utilizando los valores siguientes:

nombre-rutina
Argumento de entrada del tipo VARCHAR(257) que especifica un nombre calificado de la rutina. Si no se especifica ningún nombre de esquema, el valor por omisión es CURRENT SCHEMA cuando se procesa la rutina.
Nota:
El argumento nombre-rutina no puede incluir el carácter de comillas dobles (").

El nombre calificado de la rutina se utiliza para determinar qué rutina se debe recuperar. La rutina encontrada debe ser una rutina SQL, de lo contrario se emite un error (SQLSTATE 428F7). Cuando no se utiliza un nombre específico, se puede obtener más de una rutina, y entonces se emite un error (SQLSTATE 42725). Si ocurre esto, se debe utilizar el nombre específico de la rutina para obtenerla.

El archivo SAR debe incluir un archivo de vinculación que es posible que no esté en el servidor. Si no se ha podido encontrar el archivo de vinculación y guardarlo en el archivo SAR, se emite un error (SQLSTATE 55045).

38.3.4.2 PUT_ROUTINE_SAR

>>-PUT_ROUTINE_SAR---------------------------------------------->
 
>----(--sarblob--+--------------------------------------------------------+>
                 '-,--nuevo-propietario--,--utilizar-distintivo-registro--'
 
>----)---------------------------------------------------------><
 

El esquema es SYSFUN.

Este procedimiento apareció por primera vez en el FixPack 3 de la Versión 7.1.

El procedimiento PUT_ROUTINE_SAR pasa el archivo necesario para crear una rutina SQL en el servidor y, a continuación, define la rutina. La persona que invoque el procedimiento PUT_ROUTINE_SAR debe tener autorización DBADM.

sarblob
Argumento de entrada del tipo BLOB(3M) donde se guarda el contenido del archivo SAR de la rutina.

nuevo_propietario
Argumento de entrada del tipo VARCHAR(128) que contiene un nombre de autorización utilizado para la comprobación de autorizaciones de la rutina. El nuevo-propietario debe tener los privilegios necesarios para poder definir la rutina. Si nuevo-propietario no se especifica, se utiliza el nombre de autorización del creador original de la rutina.

utilizar-distintivo-registro
Argumento de entrada del tipo INTEGER que indica si han de utilizarse o no los registros especiales CURRENT SCHEMA y CURRENT PATH para definir la rutina. Si no se utilizan los registros especiales, los valores para el esquema por omisión y la vía de acceso de SQL son los valores que se utilizaron en el momento en que se definió originalmente la rutina. Los valores posibles de utilizar-distintivo-registro son:

0
No utilizar los registros especiales del entorno actual

1
Utilizar los registros especiales CURRENT SCHEMA y CURRENT PATH.

Si el valor es 1, se utiliza CURRENT SCHEMA para los nombres de objeto no calificados en la definición de la rutina (incluido el nombre de la rutina) y se utiliza CURRENT PATH para resolver los tipos de datos y las rutinas no calificadas en la definición de la rutina. Si no se especifica utilizar-distintivo-registro, se obtiene el mismo resultado que si se especifica el valor 0.

La información de identificación contenida en sarblob se comprueba para verificar que los datos de entrada son apropiados para el entorno, si no es así, se emite un error (SQLSTATE 55046). A continuación, el procedimiento PUT_ROUTINE_SAR utiliza el contenido de sarblob para definir la rutina en el servidor.

El contenido del argumento sarblob se extrae y coloca en archivos separados que constituyen el archivo archivador de SQL. La biblioteca compartida y los archivos de vinculación se escriben en archivos de un directorio temporal. El entorno está definido de forma que el proceso de la sentencia de definición de la rutina sabe que no es necesaria la compilación ni la edición de enlaces, y que la ubicación de la biblioteca compartida y de los archivos de vinculación es conocida. A continuación, se utiliza el contenido del archivo DDL para ejecutar dinámicamente la sentencia de definición de la rutina.

Nota:
No puede instalarse más de un procedimiento de modo simultáneo bajo un determinado esquema.

El proceso de esta sentencia puede originar los mismos errores que cuando la sentencia de definición de la rutina se ejecuta utilizando otras interfaces. Durante el proceso de definición de la rutina, se detecta la presencia de la biblioteca compartida y de los archivos de vinculación y se omiten los pasos de precompilación, compilación y enlace. El archivo de vinculación se utiliza durante el proceso de enlace y el contenido de ambos archivos se copia en el directorio habitual de una rutina SQL.

Nota:
Si una operación GET ROUTINE o PUT ROUTINE (o su correspondiente procedimiento) no se ejecuta con éxito, devuelve siempre un error (SQLSTATE 38000), junto con información de diagnóstico referente a la causa del error. Por ejemplo, si el nombre de procedimiento que se pasa a GET ROUTINE no identifica un procedimiento SQL, se devolverá el código de SQL "100" y el estado de SQL "02000", los cuales identifican la causa del problema. En este ejemplo, el código de SQL (SQLCODE) y el estado de SQL (SQLSTATE) indican que la fila especificada para el nombre de procedimiento indicado no se encontró en las tablas de catálogo.

Notas a pie de página:

1
Se inicia un nuevo nivel cada vez que se invoca un desencadenante, una función o un procedimiento almacenado.

2
A menos que la confirmación automática esté inhabilitada, las interfaces que confirman automáticamente cada sentencia devuelven un valor nulo cuando la función se invoca en sentencias separadas

3
Esto es válido para desencadenantes posteriores de inserción para cada fila (FOR EACH ROW) y para cada sentencia (FOR EACH STATEMENT).

4
Una Política de servicio define una serie de opciones de calidad de servicio que se deben aplicar a esta operación de gestión de mensajes. Estas opciones incluyen prioridad y permanencia del mensaje. Consulte el manual MQSeries Application Messaging Interface para obtener más información.

5
No se permite la serie de caracteres con un subtipo BIT DATA.


[ Principio de página | Página anterior | Página siguiente ]