sql - vinculado - En un procedimiento, conéctese a 2 bases de datos: una local y la otra remota
dar permisos a un usuario sobre una base de datos sql (2)
Intento escribir un procedimiento almacenado, en DB2 para AS400, que ejecuta una consulta en la base de datos local (la misma donde se almacena el procedimiento, se llama DBLocale
) y otra en una base de datos remota (llamémoslo DBRemoto
). En iSeries Navigator puedo ver que ambos seleccionan el nodo "Base de datos".
Intenté algo con CONNECT TO DBRemoto;
y / o SET CONNECTION DBRemoto;
, pero obtuve resultados extraños: "la conexión ya existe", "la conexión no existe", "instrucción CALL completada" (pero no se han definido los resultados), etc.
Esto sería lo que espero hacer:
CREATE PROCEDURE MYLIB.TEST_CONNECT_INSIDE_PROCEDURE
DYNAMIC RESULT SETS 1
LANGUAGE SQL
READS SQL DATA
BEGIN
DECLARE sql_string VARCHAR(1024) DEFAULT '''';
DECLARE locale INT DEFAULT -1;
DECLARE remoto INT DEFAULT -1;
DECLARE cur CURSOR FOR stmt;
DECLARE curOut CURSOR FOR select locale, remoto from SYSIBM.SYSDUMMY1;
-- run the same query in both DBs; I checked, results must be different
SET sql_string = ''select count(*) as QTY from MYLIB.MYTABLE'';
-- run locally
CONNECT TO DBLocale; --it''s one of my attempts
PREPARE stmt FROM sql_string;
OPEN cur;
FETCH cur INTO locale;
CLOSE cur;
-- run remotely
CONNECT TO DBRemoto; --it''s one of my attempts
PREPARE stmt FROM sql_string;
OPEN cur;
FETCH cur INTO remoto;
CLOSE cur;
-- output results
OPEN curOut;
SET RESULT SETS CURSOR curOut;
END;
Lo llamo con
call MYLIB.TEST_CONNECT_INSIDE_PROCEDURE()
¿Puede alguien decirme si es posible y aclarar cómo funciona, por favor? Si no es posible en un procedimiento, ¿hay alguna solución? ¡Muchas gracias!
En IBM i, debe incluir los parámetros de usuario y contraseña para las bases de datos remotas.
CONNECT TO DBRemoto USER QUAGMEIER USING ''GIGIDY''
La contraseña debe estar en mayúsculas y, al menos, en un RPG incrustado, debe estar en una variable de host.
En IBM i 7.1, Technical Refresh 4 permite la conexión a múltiples bases de datos y nombres de tres partes. Esto significa que una referencia de tabla (o vista) puede adoptar la forma dbname.schema.table , siempre que dbname sea una entrada en el Directorio de bases de datos relacionales.