/*************************************************************************/
/*	 title 		：	品番マスタ検索処理								 	 */
/*	 version	：	001												 	 */
/*	 date/author：	2003/06/30	K.Hasegawa(MIS)							 */
/*	 text		：	変更履歴管理開始									 */
/*************************************************************************/
/*****************************************************************************/
/*	品番マスタ検索処理													 	 */
/*****************************************************************************/
CREATE OR REPLACE PACKAGE CURSOR_PKG AS
	TYPE CUST_CURSOR IS REF CURSOR;
	PROCEDURE FINDER_GE(
		P_KEKKA		OUT	NUMBER,
		P_ERRMSGS	OUT	ERR_MSG_ARRAY,
		P_RC1		OUT	CUST_CURSOR,
		P_ARGS		IN	ARG_ARRAY );
END;
/
CREATE OR REPLACE PACKAGE BODY CURSOR_PKG AS

	PROCEDURE FINDER_GE(
		P_KEKKA		OUT	NUMBER,
		P_ERRMSGS	OUT	ERR_MSG_ARRAY,
		P_RC1		OUT	CUST_CURSOR,
		P_ARGS		IN	ARG_ARRAY ) IS 
-------------------------------------------------------------------------------
---------------------------<< 変数宣言 >> -------------------------------------
-------------------------------------------------------------------------------
	-- エラーラベル
	SUBSCRIPT_NOT_EXISTS	EXCEPTION;	-- 配列要素エラー
	TOO_MANY_ERRORS			EXCEPTION;	-- エラー件数最大数オーバーエラー
	ACQUIRE_WITH_NOWAIT		EXCEPTION;	-- NOWAIT時ロックエラー

	P_FLAG			VARCHAR2(1)   := P_ARGS(1);
	P_SYSTEM_ID		VARCHAR2(10)  := P_ARGS(2);
	P_COLUMN_NAME	VARCHAR2(10)  := P_ARGS(3);

	BEGIN
		P_KEKKA := 0;

		-- 異常エラーメッセージテスト
		IF P_FLAG = '1' THEN
--			ERR0013=マスター未登録エラー。キー {0} は、{1} に存在していません。
			HYBS.SET_ERRMSGS(P_ERRMSGS,				-- エラーメッセージ配列
						0,							-- 行番号
						1,							-- エラー結果(0:正常 1:警告 2:異常)
						'ERR0013',					-- エラーメッセージＩＤ
						P_SYSTEM_ID,				-- メッセージパラメータ１
						P_COLUMN_NAME);				-- メッセージパラメータ２

--			ERR0014=マスター登録済みエラー。キー {0} は、{1} にすでに登録済みです。
			HYBS.SET_ERRMSGS(P_ERRMSGS,				-- エラーメッセージ配列
						1,							-- 行番号
						1,							-- エラー結果(0:正常 1:警告 2:異常)
						'ERR0014',					-- エラーメッセージＩＤ
						P_SYSTEM_ID,				-- メッセージパラメータ１
						P_COLUMN_NAME);				-- メッセージパラメータ２

--			ERR0015=データがありませんでした。 キー {0} で {1} しましたが,０件でした。
			HYBS.SET_ERRMSGS(P_ERRMSGS,				-- エラーメッセージ配列
						2,							-- 行番号
						2,							-- エラー結果(0:正常 1:警告 2:異常)
						'ERR0015',					-- エラーメッセージＩＤ
						P_SYSTEM_ID,				-- メッセージパラメータ１
						P_COLUMN_NAME);				-- メッセージパラメータ２

--			ERR0016={0} エラー。 キー {1} で {2} しましたが,{3} のため、{4} でした。
			HYBS.SET_ERRMSGS(P_ERRMSGS,				-- エラーメッセージ配列
						3,							-- 行番号
						2,							-- エラー結果(0:正常 1:警告 2:異常)
						'ERR0016',					-- エラーメッセージＩＤ
						P_SYSTEM_ID,				-- メッセージパラメータ１
						P_COLUMN_NAME,				-- メッセージパラメータ２
						'パラメータ３',				-- メッセージパラメータ３
						'パラメータ４',				-- メッセージパラメータ４
						'パラメータ５');			-- メッセージパラメータ５
			P_KEKKA := HYBS.GET_MAX_KEKKA(P_ERRMSGS);

		-- オラクルのエラーテスト
		ELSIF P_FLAG = '2' THEN
			-- オラクルのエラーを出します。
			OPEN P_RC1 FOR
				SELECT TO_NUMBER(SYSTEM_ID) FROM GF02
				WHERE SYSTEM_ID LIKE P_SYSTEM_ID ;
		-- 正常なカーソル返しテスト
		ELSIF P_FLAG = '3' THEN
			OPEN P_RC1 FOR
				SELECT * FROM GF03 
				WHERE SYSTEM_ID   LIKE P_SYSTEM_ID
				AND   COLUMN_NAME LIKE P_COLUMN_NAME ;
		-- 警告エラーメッセージテスト
		ELSIF P_FLAG = '4' THEN
			FOR I IN 1..10 LOOP
				HYBS.SET_ERRMSGS(P_ERRMSGS,					-- エラーメッセージ配列
							I-1,							-- 行番号
							1,								-- エラー結果(0:正常 1:警告 2:異常)
							'ERR0016',						-- エラーメッセージＩＤ
							'パラメータ１',					-- メッセージパラメータ１
							'パラメータ２',					-- メッセージパラメータ２
							'パラメータ３',					-- メッセージパラメータ３
							'パラメータ４',					-- メッセージパラメータ４
							'パラメータ５' );				-- メッセージパラメータ５
			END LOOP;
			OPEN P_RC1 FOR
				SELECT * FROM GF03 
				WHERE SYSTEM_ID LIKE P_SYSTEM_ID
				AND   COLUMN_NAME LIKE P_COLUMN_NAME ;
			P_KEKKA := HYBS.GET_MAX_KEKKA(P_ERRMSGS);
		ELSE
			FOR dataGF09 IN (
						SELECT ROWNUM,MSGCD FROM GF09
						WHERE SYSTEM_ID LIKE P_SYSTEM_ID
						AND   LANG = 'ja'
						ORDER BY MSGCD
					) 
			LOOP
				HYBS.SET_ERRMSGS(P_ERRMSGS,				-- エラーメッセージ配列
							dataGF09.ROWNUM - 1,		-- 行番号
							1,							-- エラー結果(0:正常 1:警告 2:異常)
							dataGF09.MSGCD,				-- エラーメッセージＩＤ
							'A',				-- メッセージパラメータ１
							'B',				-- メッセージパラメータ２
							'C',				-- メッセージパラメータ３
							'D',				-- メッセージパラメータ４
							'E');				-- メッセージパラメータ５
			END LOOP;

			P_KEKKA := HYBS.GET_MAX_KEKKA(P_ERRMSGS);
		END IF;

	EXCEPTION
		WHEN HYBS.TOO_MANY_ERRORS THEN
			HYBS.SET_LIMITOVER(P_ERRMSGS);
			P_KEKKA := 2;
		WHEN OTHERS THEN
--			オラクルエラー。
			HYBS.SET_ERRMSGS(P_ERRMSGS,				-- エラーメッセージ配列
						2,							-- 行番号
						2,							-- エラー結果(0:正常 1:警告 2:異常)
						to_char(SQLCODE),			-- オラクルエラーコード
						substrb( SQLERRM,1,100 ));	-- オラクルエラーメッセージ
			P_KEKKA := 2;
	END FINDER_GE;

END CURSOR_PKG;
/
SHOW ERROR;
