Add DBMS/SQL/Week6/writeup.md

This commit is contained in:
Aadit Agrawal 2025-02-11 15:24:18 +05:30
parent db93a685ab
commit 8f1a41fd6c

80
DBMS/SQL/Week6/writeup.md Normal file
View File

@ -0,0 +1,80 @@
### 2. Generate a trigger displaying driver information, on participating in an accident
```SQL
SQL> create or replace trigger driver_info
after insert on participated
for each row
declare
id varchar2(4);
nam varchar2(10);
addr varchar2(30);
begin
select "driver_id#", name, address
into id, nam, addr
from person
where :new."driver_id#" = person."driver_id#";
dbms_output.put_line('driver_id: ' || id || ' name: ' || nam || ' address: ' || addr);
exception
when no_data_found then
dbms_output.put_line('no driver found for driver_id: ' || :new."driver_id#");
when others then
dbms_output.put_line('an error occurred: ' || sqlerrm);
end;
/
Trigger created.
```
### 3. Create a function to return total number of accidents happened in a particular year.
```SQL
SQL> create or replace function total_accd
(year in int)
return int
as
total int;
begin
select count(report_number)
into total
from accident
where extract(year from accd_date)=year;
return total;
end;
/
Function created.
SQL> select total_accd(2024) from dual;
TOTAL_ACCD(2024)
----------------
2
```
### 4. Create a procedure to display total damage caused due to an accident for a particular driver on a specific year.
```SQL
create or replace procedure tot_damage
(driver in varchar2, year in number) is
damage number := 0; -- initialize damage to 0
begin
select sum(damage_amount) into damage
from participated pa
natural join accident ac
where pa."driver_id#" = driver -- use the correct column name with quotes
and extract(year from ac.accd_date) = year;
dbms_output.put_line('total damage: ' || nvl(damage, 0));
exception
when no_data_found then
dbms_output.put_line('no data found for the given driver and year.');
when others then
dbms_output.put_line('an error occurred: ' || sqlerrm);
end;
/
```
```sql
SQL> execute tot_damage('1236',2024);
Total damage: 150
PL/SQL procedure successfully completed.
```