| 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;
| |