SELECT INTO によるデータの取得


  任意の日付と、得意先コードより、得意先側の支払日を取得する



  
FUNCTION GET_PAY
(
	PM_TCODE IN VARCHAR2
	,PM_UDATE IN DATE
)
RETURN DATE

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	WK_締日 得意先マスタ.締日%TYPE;
	WK_締日区分 得意先マスタ.締日区分%TYPE;
	WK_支払日 得意先マスタ.支払日%TYPE;
	WK_DATE DATE;

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('引数:'||PM_TCODE);
	DBMS_OUTPUT.PUT_LINE('引数:'||PM_UDATE);

	BEGIN
		SELECT
			締日
			,締日区分
			,支払日
		INTO
			WK_締日
			,WK_締日区分
			,WK_支払日
		FROM 得意先マスタ
		WHERE
			得意先コード = PM_TCODE;
	EXCEPTION
		WHEN NO_DATA_FOUND THEN
			NULL;
		WHEN TOO_MANY_ROWS THEN
			NULL;
		WHEN OTHERS THEN
			DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
	END;

	DBMS_OUTPUT.PUT_LINE('締日:'||WK_締日);
	DBMS_OUTPUT.PUT_LINE('締日区分:'||WK_締日区分);
	DBMS_OUTPUT.PUT_LINE('支払日:'||WK_支払日);

	IF WK_締日 = 30 THEN
		WK_DATE := ADD_MONTHS( PM_UDATE, WK_締日区分 );
	ELSE
		IF EXTRACT(DAY from PM_UDATE) <= WK_締日 then
			WK_DATE := ADD_MONTHS( PM_UDATE, WK_締日区分 );
		ELSE
			WK_DATE := ADD_MONTHS( PM_UDATE, WK_締日区分+1 );
		END IF;
	END IF;

	DBMS_OUTPUT.PUT_LINE('加工前支払日:'||WK_DATE);

	IF WK_支払日 = 30 then
		WK_DATE := LAST_DAY( WK_DATE );
	ELSE
		WK_DATE := WK_DATE - EXTRACT(day from WK_DATE)
			+ WK_支払日;
	END IF;

	RETURN WK_DATE;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
  





Oracle の日付関数のサンプル










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ