Bylo by, kdybyste to zavolali, ale bohužel ne.
Toto není problém SQL, je to logický problém. Pokud neumyjeme nádobí, zůstane špinavé. Podobně, pokud nezavoláte rutinu, která odstraní záznamy, záznamy nebudou odstraněny.
Funkci musíte zavolat v proceduře. Nejste si jisti, proč jste z toho udělali funkci, a stejně se nezkompiluje, protože nemá klauzuli RETURN. Tak to taky napravme.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Nyní tomu říkáme:
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že když spustíte svůj anonymní blok, stávající studenti budou smazáni a nahrazeni novými.