2.2 KiB

2. Generate a trigger displaying driver information, on participating in an accident

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> 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.

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> execute tot_damage('1236',2024);
Total damage: 150

PL/SQL procedure successfully completed.