2012-02-10 13 views
3

ローカルデータベースでクエリを実行するストアドプロシージャをAS400のDB2に書き込もうとしています。 DBLocaleという名前)とリモートデータベース上の他のもの(DBRemotoと呼ぶ)。オペレーション・ナビゲーターでは、「データベース」ノードを選択することができます。プロシージャでは、2つのデータベースに接続します。ローカルともう一方のリモートに接続します。

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() 

でそれをしてください呼び出します

これは私が行うことを期待するものでしょうか?プロシージャで実行できない場合は、回避策がありますか?どうもありがとう!

答えて

3

IBM iでは、リモート・データベースのユーザーとパスワードの両方のパラメーターを組み込む必要があります。

CONNECT TO DBRemoto USER QUAGMEIER USING 'GIGIDY' 

パスワードは大文字で、少なくとも埋め込みRPGではホスト変数にする必要があります。

+1

Bob CozziとFamily Guyのリファレンス。驚くばかり。 – jamesallman

+0

ありがとう!パスワードに引用符が必要ですか?とにかくそれはどの場合にも動作しません:プロシージャを作成せず、私にSQL7032エラーを与えます。 – bluish

0

IBM i 7.1では、テクニカルリフレッシュ4により、複数のデータベースと3部構成のネーミングに接続できます。つまり、のdbname.schema.table という名前のテーブル(またはビュー)参照は、リレーショナルデータベースディレクトリのエントリである限り、の形式を取ることができます。

関連する問題