1.4 KiB
1.4 KiB
P7 - Age_calc function
Problem statement: Create a stored function titled 'Age_calc'. Accept the date of birth of a person as a parameter. Calculate the age of the person in years, months and days e.g. 3 years, 2months, 10 days. Return the age in years directly (with the help of Return statement). The months and days are to be returned indirectly in the form of OUT parameters.
Creating function
CREATE OR REPLACE FUNCTION Age_calc(
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 := Age_calc(TO_DATE('2003-12-02', 'YYYY-MM-DD'), months, days);
DBMS_OUTPUT.PUT_LINE('Age: ' || years || ' Years ' || months || ' Months ' || days || ' Days.');
END;
/