Ce serait le cas si vous l'appeliez, mais hélas vous ne le faites pas.
Ce n'est pas un problème SQL, c'est un problème de logique. Si nous ne faisons pas la vaisselle, la vaisselle reste sale. De même, si vous n'appelez pas la routine qui supprime les enregistrements, les enregistrements ne sont pas supprimés.
Vous devez appeler la fonction dans la procédure. Vous ne savez pas pourquoi vous en avez fait une fonction, et elle ne compilera pas de toute façon, car elle n'a pas de clause RETURN. Alors, corrigeons cela aussi.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Maintenant, nous l'appelons :
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;
Ainsi, lorsque vous exécuterez votre bloc anonyme, les étudiants existants seront supprimés et remplacés par les nouveaux.