Update DBMS/SQL/Week6/writeup.md
This commit is contained in:
parent
a2d50a1f13
commit
90cdaa2a4f
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user