Det ville det, hvis du kaldte det, men det gør du desværre ikke.
Dette er ikke et SQL-problem, det er et logisk problem. Hvis vi ikke vasker op, forbliver opvasken snavset. På samme måde, hvis du ikke kalder rutinen, der sletter posterne, slettes posterne ikke.
Du skal kalde funktionen i proceduren. Ikke sikker på, hvorfor du har gjort det til en funktion, og det vil ikke kompilere alligevel, fordi det ikke har en RETURN-klausul. Så lad os også ordne det.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Nu kalder vi det:
create or replace PROCEDURE DELETE_ALL_STUDENTS_VIASQLDEV AS
n number;
BEGIN
dbms_output.put_line('--------------------------------------------');
dbms_output.put_line('Deleting all student rows');
n := DELETE_ALL_STUDENTS;
dbms_output.put_line('No of students deleted = '|| to_char(n));
END;
Så når du kører din anonyme blokering vil de eksisterende elever blive slettet og erstattet med de nye.