DatabaseManagementSystems/Practical/Practical Exam/PL-SQL/P7 - Age_calc.md

1.1 KiB

P7 - Age_calc function

Creating function

CREATE OR REPLACE FUNCTION P7(
    dob IN DATE,
    f_month OUT NUMBER,
    f_day OUT NUMBER
)
RETURN NUMBER
IS
	current_date DATE := SYSDATE;
	year_diff NUMBER;
	month_diff NUMBER;
	day_diff NUMBER;
BEGIN
	year_diff := EXTRACT(YEAR FROM current_date) - EXTRACT(YEAR FROM dob);
	month_diff := EXTRACT(MONTH FROM current_date) - EXTRACT(MONTH FROM dob);
	day_diff := EXTRACT(DAY FROM current_date) - EXTRACT(DAY FROM dob);

	IF (day_diff < 0) THEN
		month_diff := month_diff - 1;
		day_diff := day_diff + EXTRACT(DAY FROM last_day(add_months(SYSDATE, -1)));
	END IF;

	IF (month_diff < 0) THEN
		year_diff := year_diff - 1;
		month_diff := month_diff + 12;
	END IF;

	f_month := month_diff;
	f_day := day_diff;

	RETURN year_diff;
END;
/

Calling function

DECLARE
    years NUMBER;
    months NUMBER;
    days NUMBER;
BEGIN
    years := P7(TO_DATE('2003-12-02', 'YYYY-MM-DD'), months, days);
    DBMS_OUTPUT.PUT_LINE('Age: ' || years || ' Years ' || months || ' Months ' || days || ' Days.');
END;
/