Update DBMS/SQL/Week6/writeup.md

This commit is contained in:
Aadit Agrawal 2025-02-11 16:19:47 +05:30
parent a2d50a1f13
commit 90cdaa2a4f

View File

@ -55,14 +55,17 @@ PL/SQL procedure successfully completed.
### 3. Create a procedure to display accident information which took place in a particular location. ### 3. Create a procedure to display accident information which took place in a particular location.
```SQL ```SQL
SQL> create or replace procedure accident_info(location_value in varchar) IS SQL> CREATE OR REPLACE PROCEDURE accident_info(location_value IN VARCHAR2) IS
begin BEGIN
for accident_rec in FOR accident_rec IN
(select * from accident where location = location_value) loop (SELECT * FROM accident WHERE LOCATION = location_value) LOOP
dbms_output.put_line('Report Number: ' || accident_rec.report_number || ', Date: ' || accident_rec.accd_date || ', Location: ' || accident_rec.location); DBMS_OUTPUT.PUT_LINE('Report Number: ' || accident_rec.REPORT_NUMBER ||
end loop; ', Date: ' || TO_CHAR(accident_rec.ACCD_DATE, 'DD-MON-YYYY') ||
end; ', Location: ' || accident_rec.LOCATION);
/ END LOOP;
END;
/
``` ```
```sql ```sql
SQL> execute accident_info('Delhi India'); SQL> execute accident_info('Delhi India');
@ -74,23 +77,22 @@ PL/SQL procedure successfully completed.
### 4. Create a procedure to identify all drivers who have never been involved in any accidents. The procedure should return their driver-id, name, and address. ### 4. Create a procedure to identify all drivers who have never been involved in any accidents. The procedure should return their driver-id, name, and address.
```SQL ```SQL
SQL> CREATE OR REPLACE PROCEDURE GetDriversWithoutAccidents AS SQL>
begin CREATE OR REPLACE PROCEDURE GetDriversWithoutAccidents AS
for rec in ( BEGIN
select p.driver_id#, p.name, p.address FOR rec IN (
from person p SELECT p.driver_id#, p.name, p.address
left join participated pa on p.driver_id# = pa.driver_id# FROM person p
where pa.report_number is null LEFT JOIN participated pa ON p.driver_id# = pa.driver_id#
) loop WHERE pa.report_number IS NULL
dbms_output.put_line('driver id: ' || rec.driver_id# || ) LOOP
DBMS_OUTPUT.PUT_LINE('driver id: ' || rec.driver_id# ||
', name: ' || rec.name ||
', address: ' || rec.address);
END LOOP;
END;
/
', name: ' || rec.name ||
', address: ' || rec.address);
end loop;
end;
/
Procedure created.
``` ```
```SQL ```SQL
SQL> EXEC GetDriversWithoutAccidents; SQL> EXEC GetDriversWithoutAccidents;
@ -102,25 +104,24 @@ PL/SQL procedure successfully completed.
Q5. Write a function that takes a REGNO as input and returns the total number of accidents in which the car was involved Q5. Write a function that takes a REGNO as input and returns the total number of accidents in which the car was involved
```sql ```sql
SQL> create or replace function gettotalaccidentsbyregno(p_regno in varchar2) SQL>
return number CREATE OR REPLACE FUNCTION gettotalaccidentsbyregno(p_regno IN VARCHAR2)
is RETURN NUMBER
v_total_accidents number; IS
begin v_total_accidents NUMBER := 0; -- Initialize to 0
select count(*) BEGIN
into v_total_accidents SELECT COUNT(*)
from participated INTO v_total_accidents
where regno = p_regno; FROM participated
return v_total_accidents; WHERE REGNO = p_regno;
exception
when no_data_found then RETURN v_total_accidents;
return 0; EXCEPTION
when others then WHEN OTHERS THEN
raise; RETURN 0; -- Return 0 for any error
end; END;
/ /
Function created.
``` ```
```SQL ```SQL
SQL> SELECT GetTotalAccidentsByRegno('ABCD0001') AS Total_Accidents SQL> SELECT GetTotalAccidentsByRegno('ABCD0001') AS Total_Accidents