Би било, ако го повикате, но уви не го правите.
Това не е SQL проблем, това е логически проблем. Ако не измием чиниите остават мръсни. По същия начин, ако не извикате рутината, която изтрива записите, записите не се изтриват.
Трябва да извикате функцията в процедурата. Не съм сигурен защо сте го направили функция и така или иначе няма да се компилира, защото няма клауза RETURN. Така че, нека поправим и това.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Сега го наричаме:
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;
Така че, когато стартирате своя анонимен блок, съществуващите ученици ще бъдат изтрити и заменени с новите.