Byłoby, gdybyś to nazwał, ale niestety nie.
To nie jest problem SQL, to problem logiczny. Jeśli nie zrobimy zmywania, naczynia pozostają brudne. Podobnie, jeśli nie wywołasz procedury, która usuwa rekordy, rekordy nie są usuwane.
Musisz wywołać funkcję w procedurze. Nie jestem pewien, dlaczego zrobiłeś z niej funkcję, a i tak się nie skompiluje, ponieważ nie ma klauzuli RETURN. Więc to też naprawmy.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Teraz nazywamy to:
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;
Tak więc, gdy uruchomisz anonimowy blok, dotychczasowi uczniowie zostaną usunięci i zastąpieni nowymi.