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.
```SQL
SQL> create or replace procedure accident_info(location_value in varchar) IS
begin
for accident_rec in
(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);
end loop;
end;
/
SQL> CREATE OR REPLACE PROCEDURE accident_info(location_value IN VARCHAR2) IS
BEGIN
FOR accident_rec IN
(SELECT * FROM accident WHERE LOCATION = location_value) LOOP
DBMS_OUTPUT.PUT_LINE('Report Number: ' || accident_rec.REPORT_NUMBER ||
', Date: ' || TO_CHAR(accident_rec.ACCD_DATE, 'DD-MON-YYYY') ||
', Location: ' || accident_rec.LOCATION);
END LOOP;
END;
/
```
```sql
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.
```SQL
SQL> CREATE OR REPLACE PROCEDURE GetDriversWithoutAccidents AS
begin
for rec in (
select p.driver_id#, p.name, p.address
from person p
left join participated pa on p.driver_id# = pa.driver_id#
where pa.report_number is null
) loop
dbms_output.put_line('driver id: ' || rec.driver_id# ||
SQL>
CREATE OR REPLACE PROCEDURE GetDriversWithoutAccidents AS
BEGIN
FOR rec IN (
SELECT p.driver_id#, p.name, p.address
FROM person p
LEFT JOIN participated pa ON p.driver_id# = pa.driver_id#
WHERE pa.report_number IS NULL
) 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> 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
```sql
SQL> create or replace function gettotalaccidentsbyregno(p_regno in varchar2)
return number
is
v_total_accidents number;
begin
select count(*)
into v_total_accidents
from participated
where regno = p_regno;
return v_total_accidents;
exception
when no_data_found then
return 0;
when others then
raise;
end;
/
SQL>
CREATE OR REPLACE FUNCTION gettotalaccidentsbyregno(p_regno IN VARCHAR2)
RETURN NUMBER
IS
v_total_accidents NUMBER := 0; -- Initialize to 0
BEGIN
SELECT COUNT(*)
INTO v_total_accidents
FROM participated
WHERE REGNO = p_regno;
RETURN v_total_accidents;
EXCEPTION
WHEN OTHERS THEN
RETURN 0; -- Return 0 for any error
END;
/
Function created.
```
```SQL
SQL> SELECT GetTotalAccidentsByRegno('ABCD0001') AS Total_Accidents