diff --git a/DBMS/SQL/Week6/writeup.md b/DBMS/SQL/Week6/writeup.md new file mode 100644 index 0000000..36ce1ac --- /dev/null +++ b/DBMS/SQL/Week6/writeup.md @@ -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. +``` \ No newline at end of file