人生で2度エラーを起こしたエンジニア -10ページ目

人生で2度エラーを起こしたエンジニア

主に仕事でつまづいた内容をメインに解決策をまとめました。
その他、趣味について色々書いています。

ストアドプロシージャの通常盤を記載してみました。

この処理は1テーブルを作成する処理を行っています。

 

元のマスタを全件削除した後、

XXXマスタ(標準)データに登録する処理を行っています。

 

レビュー済みのものになるので、かなり参考になるかと思います。

なお、ID名や正確な実装ロジックはセキュリティ上の観点から非公開としています。

 

--*********************************************************************

--Copyright XXXX Software co..ltd 2021

--システム名:XXXX

--処理名:XXマスタ生成処理(XXX⇨XXX)

--処理概要:XXXをマスタを元にXXXマスタ(標準データ)を作成する。

--*********************************************************************

--Ver    日付    更新者 内容

--1.00 2026/07/29  XX 初版

--1.10 20XX/XX/XX  XX コメント訂正

--*********************************************************************

IF OBJECT_ID(N'XXX) IS NOT NULL

DROP PROC EXPDBXXX;

GO

CREATE PROCEDURE EXPDBXXX

(

-@P_REGIST_DATE NVARCHAR(20) --処理日時

-,@P_TERMINAL_IP NVARCHAR(15) --処理端末IP

-,@,P_REGIST_USER_ID NVARCHAR(50) --登録担当者ID

-,@P_ORIGIN_PGM_ID NVARCHAR(30) --起動元プログラムID

-,@P_JOB_ID NVARCHAR(12) --ジョブID

)

AS

BEGIN TRY

 -/**

--▪️処理概要

--XXマスタを元にXXマスタ(標準データ)を作成する。

--XXマスタ(標準データ)のレコードあ全件削除したのち、

--XXマスタから条件に一致するレコードを抽出し、XXマスタ(標準データ)に登録する

-**/

-

-▪️処理詳細

-♦︎初期処理

-▼ワーク領域にワーク項目を初期化する

-DECLARE

--@C_PGM_NAME NVARCHAR(50) = N'XXXマスタ(標準データ) --処理プログラム名称

--,@C_RETURN_OK INT = 0 --戻り値正常終了処理

--,@C_RETRUN_NO_RECIRD INT = 1 --戻り値レコードなし

--,@C_RETURN_NG INT = -1 --戻り値異常終了処理

-;

-

- --定数

-DECLARE

--@D_SYSDATE DATETIME --システム日付

--,@D_REGIST_DATETIME DATETIME --処理日時

--,@V_PGM_ID NVARCHAR(30) --処理プログラムID

--,@V_SUB_PGM_NAME NVARCHAR(50) --サブ処理プログラム名称

--,@V_LOG NVARCHAR(2000) --出力ログ

--,@V_PROCESSING_KEY_MAX NVARCHAR(14) --処理きー(最大)

--,@N_RETURN_CD INT --戻り値

--,@N_INSERT_ROW_COUNT INT --登録件数

-:

-

- --以下の設定を行う。(DB固有昨日でエラーは基本的に発生しない)

-SET @D_SYSDATE = GETDATE(); --システム日付

-SET @V_PGM_ID = OBJECT_NAME(@@PROCID); --処理プログラムID

-

-

- --▼開始ログ

- --[変数.出力ログ]の文言を設定する。

-SET @V_LOG = 'P_REGIST_DATE=' + ISNULL(@P_REGIST_DATE, '') +

-','+P_TERMINAL_IP =' + ISNULL(@P_TERMINAL_ID, '') +

-','+P_REGIST_USER_ID =' + ISNULL(@P_REGIT_USER_ID, '') +

-','+'P_JOB_ID =' + ISNULL(@P_JOB_ID, '')

-;

-

- --開始ログ処理を呼び出す

EXECUTE dbo.LOG_START

--@P_TERMINAL_IP = @P_TERMINAL_IP

--,@P_REGIST_USER_ID = @P_REGIST_USER_ID

--,@P_ORIGIN_PGM_ID = @P_ORIGIN_PGM_ID

--,@P_PGM_ID = @V_PGM_ID

--,@P_PGM_NAME = @C_PGM_NAME

--,@P_LOG = @V_LOG

-;

-

- --▼変数.処理日時の設定処理を行います。

- --変数.サブ処理プログラム名称を設定する。

-SET @V_SUB_PGM_NAME = N'[D_REGIST_DATETIME:処理日時]の設定;

-

- --変数.処理日時を設定する。

-IF ISNULL(@P_REGIST_DATE, '') = ''

- --パラメータ.処理日時が指定されていない場合、変数.システム日付を設定する

-BEGIN

- SET @D_REGIST_DATETIME = @D_SYSDATE;

- END;

-ELSE

- --パラメータ.処理日時が指定されている場合、パラメータ.処理日時を変換・設定する

-BEGIN

- SET @D_REGIST_DATETIME = CONVERT(DATETIME. @P_REGIST_DATE);

-END;

-;

-

-

- --XXXマスタ(標準データ)削除・登録処理

- ▼XXXマスタ(標準データ)をクリアする。

-- --変数.サブ処理プログラム名称を設定する。

-SET @V_SUB_PGM_NAME = N'[EXP_M_XX:XXマスタ(標準データ)]:削除処理';

-

- --XXXマスタ(標準データ)削除処理を行う

-DELETE FROM EXP _M_XX;

-

- --▼各テーブルの最大処理キーを処理する。

- --▼XXXマスタの最新処理キー(処理キー値がMAX)を取得sルウ。

- --変数.サブ処理プログラム名称を設定する。

-SET @V_SUB_NAME = N'[EXPBD_C_XXX:XXXマスタ(XXX格納)・・・;

-

- --XXXマスタ(XXX格納)の最新処理機ー(処理キー値がMAX)取得処理を行う

-SELECT @V_PROCCESINF_KEY_MAX = MAX(PROCESSING_KEY)

-FROM EXPDB_C_XXX

-;

-

- --▼以下の条件でテーブルを検索し、XXXマスタ(標準データ)に登録する。

- --変数.サブ処理プログラム名称を設定する。

-SET @V_SUB_PGM_NAME = N'[EXP_M_XXXマスタ(標準データ)]:登録処理';

-

- --検索・登録処理を行う。

-INSERT INTO EXP_M_XXXX

-(

--12カラム設定

--,12カラム設定

-)

-SELECT

--12カラム設定

--dbo.ConvOFStandard_CHAR(T1.XXX)

--,dbo.ConvOFStandard_CHAR(T1.XXX)

--,@V_PGM_ID

--,@D_REFIST_DATETIME

--,@V_PGM_ID

--,@D_REGIST_DATETIME

-FROM EXPDB_C_XXXX T1

-WHERE

-T1.PROCESSING_KEY = @V_PROCESSING_KEY_MAX

-;

-

- --▼【INFO】登録件数の出力。

- --変数設定を行う。

-SET @INSERT_ROW_COUNT = @@ROW_COUNT;

-SET @V_LOG = N'[EXP_M_XXX:XXXマスタ(標準データ)]:登録件数:' + CONVERT(NVARCHAR, @N_INSERT_ROW_COUNT + '件';

-

- --INFOMATIONログ出力処理を呼び出す。

-EXECUTE dbo.LOG_INFO

--@P_TERMINAL_IP = @P_TERMINAL_IP

--,@P_REGIST_USER_ID = @P_REGIST_USER_ID

--,@P_ORIGIN_PGM_ID = @P_ORIGIN_PGM_ID

--,@P_PGM_ID = @V_PGM_ID

--,@P_PGM_NAME = @C_PGM_NAME

--,@P_LOG = @V_LOG

-;

-

-

END TRY

BEGIN CATCH

- --▼エラー情報をログへ出力sルウ。

- --エラー情報変数を宣言する。

-DECLARE

--@N_ERROR_NUMBER INT --エラー番号

--,@V_ERROR_MESSAGE NVARCHAR(2000) --エラー内容

--,@N_ERROE_LINE INT --エラー行

-;

- --エラー情報を取得する。

-SELECT

--@N_ERROR_NUMBER = ERROR_NUMBER()

--,@V_ERROR_MESSAGE = ERROR_MESSAGE()

--,@N_ERROR_LINE = ERROR_LINE()

-;

-

- --異常終了後ログ出力処理を呼び出す。

-EXECUTE dbo.LOG_ERRO

--@P_TERMINAL_IP = @P_TERMINAL_IP

--,@P_REGIST_USER_ID = @P_REGIST_USER_ID

--,@P_ORIGIN_PGM_ID = @P_ORIGIN_PGM_ID

--,@P_RETURN_CD =@C_RETURN_CD

--,@P_PGM_ID = @V_PGM_ID

--,@P_PGM_NAME = @C_PGM_NAME

--,@P_SUB_PGM_NAME = @V_SUB_PGM_NAME

--,@P_ERROR_NUMBER = @N_ERROR_NUMBER

--,@P_ERROR_MESSAGE = @V_ERROR_MESSAGE

--,@P_ERROR_LINE - @N_ERROE_LINE

-;

-

- --呼び出し元に異常終了(Throw)を戻す。

-THROW;

-

END CATCH