■質問内容
現在クラシックASP+ADOを用いてOracle(.ver 12c)のストアドプロシージャの実行を行うよう新規構築しています。
以下のコードにてストアドプロシージャの実行自体は出来ることをストアドプロシージャの処理内でINSERTされるテーブル等で確認しているのですが、ストアドプロシージャの戻り値を取得できておりません。(以下ソース内コメント★の箇所)
ストアドプロシージャの戻り値をASPにて取得したいのですが、必要な設定、コード等ありますでしょうか?
尚、ストアドプロシージャを直接実行すると、戻り値を取得できることは確認済みです。
■ソース(抜粋)
・ASP(.asp)
Dim objCmd
Set objCmd = Server.CreateObject(“ADODB.Command”)
objCmd.CommandText = “Begin ? :=TEST_SP.MAIN(?, ?, ?, ?); end;”
objCmd.CommandType = 1
objCmd.Parameters.Append objCmd.CreateParameter(“RetVal”, 131, 4, 10, 1)
objCmd.Parameters.Append objCmd.CreateParameter(“DtCnt”, 131, 2, 10, 2)
objCmd.Parameters.Append objCmd.CreateParameter(“ErrFlg”, 131, 2, 10, 3)
objCmd.Parameters.Append objCmd.CreateParameter(“ErrCd”, 131, 2, 10, 4)
objCmd.Parameters.Append objCmd.CreateParameter(“ErrMsg”, 200, 2, 600, “ ”)
objCmd.Execute
‘★以下のResponse.Writeが全て値が表示されない。ここでストアドの戻り値を取得させたい
Response.Write “RetVal = ” & objCmd.Parameters(“RetVal”).Value & “<br>”
Response.Write “DtCnt = ” & objCmd.Parameters(“DtCnt”).Value & “<br>”
Response.Write “ErrFlg = ” & objCmd.Parameters(“ErrFlg”).Value & “<br>”
Response.Write “ErrCd = ” & objCmd.Parameters(“ErrCd”).Value & “<br>”
Response.Write “ErrMsg = ” & objCmd.Parameters(“ErrMsg”).Value & “<br>”
・ストアドプロシージャ
CREATE OR REPLACE PACKAGE TEST_SP IS
FUNCTION MAIN (
p_DTOUTCNT OUT NUMBER
,p_ERRFLG OUT NUMBER
,p_ERRCD OUT NUMBER
,p_ERRSTR OUT VARCHAR2
) RETURN NUMBER;
END;
・ストアドプロシージャ(BODY)
CREATE OR REPLACE PACKAGE BODY TEST_SP
IS
FUNCTION MAIN(
p_DTOUTCNT OUT NUMBER
,p_ERRFLG OUT NUMBER
,p_ERRCD OUT NUMBER
,p_ERRSTR OUT VARCHAR2
) RETURN NUMBER IS
BEGIN p_DTOUTCNT := 0; p_ERRFLG := 0; p_ERRCD := 0; SELECT COUNT(1) INTO p_DTOUTCNT FROM LOG_TBL; IF p_DTOUTCNT = 0 THEN p_ERRFLG := 1; p_ERRCD := 9; p_ERRSTR := 'NOT FOUND'; ELSE p_ERRFLG := 0; p_ERRCD := 0; p_ERRSTR := NULL; END IF; RETURN 0; EXCEPTION WHEN OTHERS THEN p_ERRCD := SQLCODE; p_ERRSTR := 'ERR-MAIN'; ROLLBACK; RETURN 1; END MAIN;
END TEST_SP;
あなたの回答
tips
プレビュー