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

57 lines
1.1 KiB
Markdown
Raw Normal View History

2024-11-08 23:10:40 +05:30
# P7 - Age_calc function
## Creating function
```sql
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;
2024-11-08 23:10:40 +05:30
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);
2024-11-08 23:10:40 +05:30
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;
2024-11-08 23:10:40 +05:30
IF (month_diff < 0) THEN
year_diff := year_diff - 1;
month_diff := month_diff + 12;
END IF;
2024-11-08 23:10:40 +05:30
f_month := month_diff;
f_day := day_diff;
2024-11-08 23:10:40 +05:30
RETURN year_diff;
END;
2024-11-08 23:10:40 +05:30
/
```
## Calling function
```sql
DECLARE
years NUMBER;
months NUMBER;
days NUMBER;
2024-11-08 23:10:40 +05:30
BEGIN
years := P7(TO_DATE('2003-12-02', 'YYYY-MM-DD'), months, days);
DBMS_OUTPUT.PUT_LINE('Age: ' || years || ' Years ' || months || ' Months ' || days || ' Days.');
2024-11-08 23:10:40 +05:30
END;
/
```
---