Det skulle det om du ringde det, men det gör du tyvärr inte.
Detta är inte ett SQL-problem, det är ett logiskt problem. Om vi inte diskar förblir disken smutsig. Om du inte anropar rutinen som raderar posterna tas inte posterna bort.
Du måste anropa funktionen i proceduren. Inte säker på varför du har gjort det till en funktion, och det kommer inte att kompilera ändå, eftersom det inte har en RETURN-klausul. Så låt oss fixa det också.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Nu kallar 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ör ditt anonyma block kommer de befintliga eleverna att tas bort och ersättas med de nya.