- - PR -
Oracle側のプロシージャで出力したのエラーメッセージ、Visual Studio2005側でこのメッセージが取得できな
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-09-07 21:50
Williamと申します、
すみませんですが、私は今新しい問題があった、お先輩たち助けでください。 問題:Oracle側のプロシージャで出力したのエラーメッセージ、Visual Studio2005側でこのメッセージが取得できない。 環境:Oracle 10G Visual Studio2005 C#側のソース: // ストアド・プロシージャ"TEST.SQL"の発行【ExecNonQuery】 o_Database.ExecNonQuery(ConstValues.TEST,CommandType.StoredProcedure,oraParam); //ログ出力NOより、ログ出力メッセージの取得 s_LogMsg = o_LogFiles.GetDBLog(o_Database, i_LogNumber); //ログの書込み o_LogFiles.WriteLogFile(sLogFileName, s_LogMsg); プロシージャ側: CREATE OR REPLACE PACKAGE BODY TEST AS PROCEDURE MAIN(I_UNYOU_YM IN CHAR , O_OUTLOG_KEY OUT NUMBER , O_STATUS OUT NUMBER , O_MSG OUT VARCHAR2 , O_SQLCODE OUT CHAR , O_SQLMSG OUT VARCHAR2) IS v_Msg S_MW_LOG_PUT.LOG_MESSAGE%TYPE; n_MEISAINO S_MW_LOG_PUT.LOG_MEISAI_NO%TYPE; n_InsCnt NUMBER; n_DtlInsCount NUMBER; n_DelCnt NUMBER; v_TMPVAR VARCHAR2(50); C_PROCEDURENAME CONSTANT VARCHAR2(4) := 'MAIN'; C_PRGID CONSTANT VARCHAR2(10) := 'TEST'; v_SYSTEM_CODE VARCHAR2(3) := ASCHA_BT_CONST.MM_SYSTEM_CONFIG_VAR; v_SYSTEM_OPTION VARCHAR2(6) := ASCHA_BT_CONST.MM_SYSTEM_CONFIG_OPTION; BEGIN n_InsCnt := 0; n_DtlInsCount := 0; -- ログ出力準備 O_OUTLOG_KEY := TTTT.sp_GetLogNo(); --システム環境設定情報マスタよりオプション用途CDを取得する SELECT COUNT (VALUE_STR) --値(文字) INTO n_InsCnt FROM S_MM_SYSTEM_CONFIG WHERE TRIM(SYSTEM_CD) = '22' AND TRIM(YOTO_SBT_CD) = '44'; IF n_InsCnt = 0 THEN -- ログ出力処理 v_Msg := REPLACE(TTT.MESG, '{0}', 'TEST'); n_MeisaiNo := n_MeisaiNo + 1; ASCHA_SP_TOOL.sp_WriteLogDB(O_OUTLOG_KEY , n_MeisaiNo , C_PRGID , TTT.MSG_INFO_F , 'MESG' , v_Msg , ''); --異常終了処理 O_STATUS := TTT.ABNORMAL_WARNING; O_SQLCODE := SQLCODE; O_SQLMSG := 'エラー発生関数:' || C_PROCEDURENAME; O_SQLMSG := SUBSTR(O_SQLMSG || ' エラー内容:' || SQLERRM(SQLCODE),1,256); RETURN; ELSE SELECT NVL(VALUE_STR, '') --値(文字) INTO v_TMPVAR FROM S_MM_SYSTEM_CONFIG WHERE TRIM(SYSTEM_CD) = v_SYSTEM_CODE AND TRIM(YOTO_SBT_CD) = v_SYSTEM_OPTION; -- ログ出力処理 v_Msg := REPLACE(TTT.MESG, '{0}', 正常TEST'); n_MeisaiNo := n_MeisaiNo + 1; ASCHA_SP_TOOL.sp_WriteLogDB(O_OUTLOG_KEY , n_MeisaiNo , C_PRGID , TTT.MSG_INFO_F , 'MESG' , v_Msg , ''); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN O_STATUS := TTT.ABNORMAL_WARNING; WHEN OTHERS THEN O_STATUS := TTT.ABNORMAL_FATAL; O_SQLCODE := SQLCODE; O_SQLMSG := 'エラー発生関数:' || C_PROCEDURENAME; O_SQLMSG := SUBSTR(O_SQLMSG || ' エラー内容:' || SQLERRM(SQLCODE),1,256); END MAIN; END TEST; / 結果: エラーある時、C#側メッセージ取得できない。 エラーない時、C#側メッセージ取得できます。 助けてください。 |
|
投稿日時: 2007-09-11 11:26
皆さん、おはようございます。
お蔭様で、この問題が解決しました。 原因は今まではっきり分からないので、でも結果としてはOKなった。 解決方法: 特にはないけど、私はSQLで真剣にミス探した、微妙なところで修正した。 有難うございます。 |
1