From 90cdaa2a4f930fbdb8af7ade547ee21e65d10559 Mon Sep 17 00:00:00 2001 From: Aadit Agrawal Date: Tue, 11 Feb 2025 16:19:47 +0530 Subject: [PATCH] Update DBMS/SQL/Week6/writeup.md --- DBMS/SQL/Week6/writeup.md | 85 ++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/DBMS/SQL/Week6/writeup.md b/DBMS/SQL/Week6/writeup.md index 1739e63..e649a77 100644 --- a/DBMS/SQL/Week6/writeup.md +++ b/DBMS/SQL/Week6/writeup.md @@ -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