ASSOCIATE LOCATORS sentencia

La sentencia ASSOCIATE LOCATORS obtiene el valor localizador de cada conjunto de resultados devuelto por un procedimiento almacenado.

Invocation for ASSOCIATE LOCATORS

Esta declaración puede integrarse en un programa de aplicación. Se trata de una sentencia ejecutable que puede prepararse de forma dinámica. No se puede emitir de forma interactiva.

Autorización para ASSOCIATE LOCATORS

No se necesita ninguna.

Sintaxis para ASSOCIATE LOCATORS

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualASSOCIATERESULT SETLOCATORLOCATORS( ,rs-localizador-variable )WITH PROCEDURE nombre-procedimientovariable-lenguaje-principal

descripción para ASSOCIATE LOCATORS

variable-localizadora-cr
Identifica una variable de localización de conjunto de resultados que ha sido declarada de acuerdo con las reglas para declarar variables de localización de conjunto de resultados.
CON PROCEDIMIENTO nombre-procedimiento o variable-host
Identifica el procedimiento almacenado que devolvió uno o más conjuntos de resultados. Cuando se ejecuta la instrucción ASSOCIATE LOCATORS, el nombre del procedimiento debe identificar un procedimiento almacenado que el solicitante ya haya invocado utilizando la instrucción SQL CALL. El nombre del procedimiento puede especificarse como un nombre de una, dos o tres partes. El nombre de procedimiento ASSOCIATE LOCATORS se debe especificar de la misma manera que se especificó en la sentencia CALL. Por ejemplo, si se especificó un nombre de procedimiento de dos partes en la instrucción CALL, debe especificar un nombre de procedimiento de dos partes en la instrucción ASSOCIATE LOCATORS.

Si se utiliza una variable de host para especificar el nombre:

  • Debe ser una variable de cadena de caracteres con un atributo de longitud que no sea superior a 255.
  • No debe ir seguida de una variable indicadora.
  • El valor de la variable host es una especificación que depende del servidor. Independientemente del servidor, la especificación debe:
    • Se justificará a la izquierda dentro de la variable de host
    • No contener espacios en blanco incrustados
    • Se rellena a la derecha con espacios en blanco si su longitud es menor que la de la variable anfitriona

Notas para ASSOCIATE LOCATORS

Asignación de valores de localizadores : Si la sentencia ASSOCIATE LOCATORS especifica varias variables de localizador, los valores de localizador se asignan a las variables de localizador en el orden en que se abren los cursores asociados, independientemente de si todavía están abiertos o no en tiempo de ejecución. Los valores de localizador se asignan a las variables de localizador en el mismo orden en que se colocarían en las entradas SQLVAR en el SQLDA como resultado de una instrucción DESCRIBE PROCEDURE.

Los valores del localizador no se proporcionan para los cursores que se cierran cuando el control se devuelve a la aplicación que lo invocó. Si un cursor se cerró y luego se volvió a abrir antes de volver a la aplicación de invocación, la instrucción OPEN CURSOR ejecutada más recientemente para el cursor se utiliza para determinar el orden en que se devuelven los valores del localizador para los conjuntos de resultados del procedimiento. Por ejemplo, supongamos que el procedimiento P1 abre tres cursores A, B, C, cierra el cursor B y luego emite otra instrucción OPEN CURSOR para el cursor B antes de volver a la aplicación invocadora. Los valores de localizador asignados para la siguiente declaración de LOCALIZADORES ASOCIADOS estarán en el orden A, C, B:
ASSOCIATE RESULT SET LOCATORS (:loc1, :loc2, :loc3) WITH PROCEDURE P1;
   -- assigns locators for result set cursors A, C, and B

Se puede asociar más de un localizador a un conjunto de resultados. Puede emitir varias sentencias ASSOCIATE LOCATORS para el mismo procedimiento almacenado con diferentes variables de localizador de conjunto de resultados para asociar varios localizadores con cada conjunto de resultados.

  • Si el número de variables de localización de conjuntos de resultados especificadas en la sentencia ASSOCIATE LOCATORS es menor que el número de conjuntos de resultados devueltos por el procedimiento almacenado, se asigna un valor a todas las variables de localización especificadas en la sentencia y se emite una advertencia. Por ejemplo, supongamos que existe el procedimiento P1 y devuelve cuatro conjuntos de resultados. Cada una de las siguientes declaraciones de ASSOCIATE LOCATORS devuelve información sobre el primer conjunto de resultados junto con una advertencia de que no se proporcionaron suficientes localizadores para obtener información sobre todos los conjuntos de resultados.
    CALL P1;									
    ASSOCIATE RESULT SET LOCATORS (:loc1) WITH PROCEDURE P1;
    		-- :loc1 is assigned a value for first result set, and a warning is returned
    ASSOCIATE RESULT SET LOCATORS (:loc2) WITH PROCEDURE P1;
         -- :loc2 is assigned a value for first result set, and a warning is returned
    ASSOCIATE RESULT SET LOCATORS (:loc3) WITH PROCEDURE P1;
         -- :loc3 is assigned a value for first result set, and a warning is returned
    ASSOCIATE RESULT SET LOCATORS (:loc4) WITH PROCEDURE P1;
         -- :loc4 is assigned a value for first result set, and a warning is returned
  • Si el número de variables de localización del conjunto de resultados que se enumeran en la instrucción ASSOCIATE LOCATORS es mayor que el número de localizadores devueltos por el procedimiento almacenado, a las variables de localización adicionales se les asigna un valor de 0.

Acceso a conjuntos de resultados desde múltiples sentencias CALL : Una aplicación puede acceder a conjuntos de resultados creados por múltiples sentencias CALL. Los conjuntos de resultados pueden crearse mediante un procedimiento diferente o mediante el mismo procedimiento invocado varias veces.

  • Invocar diferentes procedimientos: La invocación de diferentes procedimientos con el mismo nombre se puede realizar de forma explícita especificando las diferentes colecciones o de forma implícita con el uso de la RUTA DEL PAQUETE. Por ejemplo, para identificar explícitamente las diferentes colecciones, especifique nombres calificados en la instrucción CALL. Aunque ambos procedimientos se denominan " P2 ", son procedimientos diferentes. Después de la segunda sentencia CALL, la aplicación puede acceder a los conjuntos de resultados de ambos procedimientos.
    CALL X.P2;
    CALL Y.P2;
    Las colecciones para los dos procedimientos diferentes también pueden determinarse implícitamente a partir de PATH DEL PAQUETE cuando se especifican nombres de procedimientos no cualificados como parte de la instrucción CALL. Por ejemplo, supongamos que el procedimiento P4 existe en las colecciones X y Z. Una aplicación contiene dos sentencias CALL para invocar el procedimiento P4. Las referencias al procedimiento P4 en las sentencias CALL no están cualificadas. Por lo tanto, el registro especial PATH DEL PAQUETE se utiliza para resolver el nombre del procedimiento. El procedimiento X.P4 se invoca para la primera instrucción CALL y el procedimiento Z.P4 es invocado por la segunda instrucción CALL. Tras la segunda sentencia CALL, la aplicación puede acceder a los conjuntos de resultados de ambos procedimientos.
    SET CURRENT PACKAGE PATH = X, Y, Z;
    CALL P4;
    SET CURRENT PACKAGE PATH = PATH Z, Y, X;
    CALL P4;
  • Invocar el mismo procedimiento varias veces : si el servidor y el solicitante son ambos de la misma versión de Db2, puede llamar a un procedimiento almacenado varias veces dentro de una aplicación y en el mismo nivel de anidamiento. Cada llamada al mismo procedimiento almacenado hace que se ejecute una instancia única del procedimiento almacenado. Si el procedimiento almacenado devuelve conjuntos de resultados, cada instancia del procedimiento almacenado abre su propio conjunto de cursores de conjuntos de resultados. Para obtener más información sobre esta situación, consulte Llamadas múltiples al mismo procedimiento almacenado.
    Cuando se invoca un procedimiento varias veces en una aplicación y es necesario procesar los conjuntos de resultados de las diferentes instancias al mismo tiempo, asegúrese de utilizar la sentencia ASSOCIATE LOCATORS después de cada sentencia CALL para capturar los valores de localizador devueltos por cada invocación del procedimiento. Por ejemplo, supongamos que el procedimiento P existe en la colección Z y que una aplicación contiene dos sentencias CALL para invocar el procedimiento P. El PACKAGE PATH se utiliza para determinar la colección para el procedimiento en la primera sentencia CALL, y la colección se especifica explícitamente en la segunda sentencia CALL. Los conjuntos de resultados de ambos procedimientos pueden ser accesibles para la aplicación después de ambas sentencias CALL si los localizadores de los conjuntos de resultados producidos por la primera sentencia CALL se capturan con una sentencia ASSOCIATE LOCATOR antes de invocar el procedimiento por segunda vez.
    SET CURRENT PACKAGE PATH = X, Y, Z;
    CALL P3;
    ASSOCIATE LOCATORS ...
    CALL Z.P3;
    ASSOCIATE LOCATORS ...
    -- process the result sets using the locators

Uso de variables de host : Si la instrucción ASSOCIATE LOCATORS contiene variables de host, se aplican las siguientes condiciones:

  • Si la instrucción se ejecuta de forma estática, se asume que el contenido de las variables del host está en el esquema de codificación que se especificó en el parámetro ENCODING cuando se vinculó el paquete o plan que contiene la instrucción.
  • Si la instrucción se ejecuta dinámicamente, se asume que el contenido de las variables del host está en el esquema de codificación especificado en la opción de enlace CODIFICACIÓN DE LA APLICACIÓN.

Ejemplos para ASSOCIATE LOCATORS

Se asume que las declaraciones de los siguientes ejemplos están en programas PL/I.

Ejemplo 1 : Utilice las variables de localizador de conjuntos de resultados LOC1 y LOC2 para obtener los valores de localizador de conjuntos de resultados para los dos conjuntos de resultados devueltos por el procedimiento almacenado P1. Asume que el procedimiento almacenado se llama con un nombre de una parte del servidor actual SITE2.
   EXEC SQL CONNECT TO SITE2;
   EXEC SQL CALL P1;
   EXEC SQL ASSOCIATE RESULT SET LOCATORS (:LOC1, :LOC2)
            WITH PROCEDURE P1;
Ejemplo 2 : Repita el escenario del Ejemplo 1, pero utilice un nombre de dos partes para especificar un nombre de esquema explícito para el procedimiento almacenado y asegurarse de que se utiliza el procedimiento almacenado P1 en el esquema MYSCHEMA.
   EXEC SQL CONNECT TO SITE2;
   EXEC SQL CALL MYSCHEMA.P1;
   EXEC SQL ASSOCIATE RESULT SET LOCATORS (:LOC1, :LOC2)
            WITH PROCEDURE MYSCHEMA.P1;
Ejemplo 3 : Utilice las variables de localizador de conjuntos de resultados LOC1 y LOC2 para obtener los valores de localizador de conjuntos de resultados para los dos conjuntos de resultados que devuelve el procedimiento almacenado denominado por la variable de host HV1. Supongamos que la variable de host HV1 contiene el valor SITE2.MYSCHEMA.P1 y que el procedimiento almacenado se llama con un nombre de tres partes.
   EXEC SQL CALL SITE2.MYSCHEMA.P1;
   EXEC SQL ASSOCIATE LOCATORS (:LOC1, :LOC2)
            WITH PROCEDURE :HV1;
El ejemplo anterior no sería válido si la variable de host HV1 hubiera contenido el valor MYSCHEMA.P1, un nombre de dos partes. Para que el ejemplo sea válido con ese nombre de dos partes en la variable de host HV1, el servidor actual debe ser el mismo que el nombre de ubicación que se especifica en la instrucción CALL, como demuestran las siguientes instrucciones. Esta es la única condición bajo la cual los nombres no tienen que especificarse de la misma manera y un nombre de tres partes en la declaración CALL puede usarse con un nombre de dos partes en la declaración ASSOCIATE LOCATORS.
   EXEC SQL CONNECT TO SITE2;
   EXEC SQL CALL SITE2.MYSCHEMA.P1;
   EXEC SQL ASSOCIATE LOCATORS (:LOC1, :LOC2)
            WITH PROCEDURE :HV1;