- PR -

Oracle側のプロシージャで出力したのエラーメッセージ、Visual Studio2005側でこのメッセージが取得できな

1
投稿者投稿内容
william
会議室デビュー日: 2007/04/25
投稿数: 16
投稿日時: 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#側メッセージ取得できます。

助けてください。
william
会議室デビュー日: 2007/04/25
投稿数: 16
投稿日時: 2007-09-11 11:26
皆さん、おはようございます。
お蔭様で、この問題が解決しました。

原因は今まではっきり分からないので、でも結果としてはOKなった。
解決方法:
特にはないけど、私はSQLで真剣にミス探した、微妙なところで修正した。

有難うございます。
1

スキルアップ/キャリアアップ(JOB@IT)