В процедуре подключитесь к 2 базам данных: одной локальной и другой удаленной - PullRequest
3 голосов
/ 10 февраля 2012

Я пытаюсь написать хранимую процедуру в DB2 для AS400, которая выполняет запрос к локальной базе данных (такой же, где процедура хранится; она называется DBLocale), а другую - в удаленной базе данных (давайте назовите это DBRemoto). В Навигаторе iSeries я вижу, как они выбирают узел «База данных».

Я пробовал что-то с CONNECT TO DBRemoto; и / или SET CONNECTION DBRemoto;, но получил странные результаты: «соединение уже существует», «соединение не существует», «инструкция CALL выполнена» (но без набора результатов) и т. Д.

Это то, что я ожидаю сделать:

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;

Я звоню с

call MYLIB.TEST_CONNECT_INSIDE_PROCEDURE()

Может кто-нибудь сказать мне, если это возможно, и уточнить, как это работает, пожалуйста? Если это невозможно в процедуре, есть ли обходной путь? Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

В IBM i необходимо включить параметры пользователя и пароля для удаленных баз данных.

CONNECT TO DBRemoto USER QUAGMEIER USING 'GIGIDY'

Пароль должен быть в верхнем регистре и, по крайней мере, во встроенной RPG, он должен быть впеременная хоста.

0 голосов
/ 15 июля 2013

В IBM i 7.1 Technical Refresh 4 позволяет подключаться к нескольким базам данных и называть имена из 3 частей.Это означает, что ссылка на таблицу (или представление) может принимать форму dbname.schema.table , если dbname является записью в каталоге реляционных баз данных.

...