Es würde, wenn Sie es anrufen würden, aber leider tun Sie es nicht.
Das ist kein SQL-Problem, sondern ein Logikproblem. Wenn wir nicht abwaschen, bleibt das Geschirr schmutzig. Ebenso werden die Datensätze nicht gelöscht, wenn Sie die Routine nicht aufrufen, die die Datensätze löscht.
Sie müssen die Funktion in der Prozedur aufrufen. Nicht sicher, warum Sie es zu einer Funktion gemacht haben, und es wird sowieso nicht kompiliert, weil es keine RETURN-Klausel hat. Also, lassen Sie uns das auch beheben.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Jetzt nennen wir es:
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;
Wenn Sie also Ihren anonymen Block ausführen, werden die vorhandenen Schüler gelöscht und durch die neuen ersetzt.