PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
23065 07/07/16 10:46:28 PB8.0: パッケージの動的SQLによる実行 By nek

カテゴリ:スクリプトの記述
日付:2007年07月16日 10:46 発信者:nek
題名:PB8.0: パッケージの動的SQLによる実行

いつも参考にさせていただいています。
よく上がっている動的SQLについて他の記述を見ても分からないところがありましたので
ご教示いただければと思っています。

タイトルにも記述しましたがパッケージを実行するのですが、
入力パラメータと結果を動的に生成した文字列により実行したいと思っているのですが
Oracleのエラーになり、そのエラーのタイミングと結果が分からずに困っています。
具体的に書かせていただくとプロシージャはINとOUTのパラメータを持っており
パッケージによってはOUTがないものもあります。

CREATE OR REPLACE PACKAGE ADSQL_B0010 AS
--プロシージャ
PROCEDURE PR_MAIN (
pv_Kai_Code IN VARCHAR,
pv_Log_Usr IN VARCHAR,
pv_Log_Cmp IN VARCHAR,
pn_ErrCode OUT NUMBER,
pv_ErrMsg OUT VARCHAR
);

PROCEDURE PR_MAIN2 (
pv_Kai_Code IN VARCHAR,
pv_Log_Usr IN VARCHAR,
pv_Log_Cmp IN VARCHAR
);
END;
/

PBには以下のように記述しています。

//↓実際にはココで場合わけにより動的に生成しています。
lst_Sqlstatement = \"EXECUTE ADSQL_B0010.PR_MAIN(?,?,?)\"

PREPARE SQLSA FROM :lst_Sqlstatement ;
DESCRIBE SQLSA INTO SQLDA;

//ストアドの宣言
DECLARE MY_PROC DYNAMIC PROCEDURE FOR SQLSA ;

//INパラメータの設定
SQLDA.SetDynamicParm(1, ist_Kai_Code)
SQLDA.SetDynamicParm(2, ist_Log_User)
SQLDA.SetDynamicParm(3, ist_Log_Computer)

//ストアド実行
EXECUTE DYNAMIC MY_PROC USING DESCRIPTOR SQLDA ;
IF iSQLTran.SQLCode <> 0 THEN
MessageBox(\"\", iSQLTran.SQLErrText)
RETURN(lin_Ret)
END IF

//OUTPUTパラメータの取得
lst_RESLUT[1] = String(SQLDA.GetDynamicNUMBER ( 1 ))
lst_RESLUT[2] = String(SQLDA.GetDynamicString ( 2 ))

CLOSE MY_PROC;

この状態でPBを実行すると「DESCRIBE SQLSA INTO SQLDA;」で
SQLCA.ErrTextを見ると「ORA-24333: 繰返し数が0(ゼロ)です。」が発生しています。

しばらくPBから離れていたこともあり、感も鈍っていまして
解決策がどうしても見つかりません。
どうぞよろしくお願い致します。


付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows 2000
DBMS (記載なし)
Browser (記載なし)

Server SoftWare

OS Windows Server 2003
DBMS Oracle8i
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.