Het zou als je het zou noemen, maar helaas doe je het niet.
Dit is geen SQL-probleem, het is een logisch probleem. Als we de afwas niet doen, blijft de vaat vies. Evenzo, als u de routine die de records verwijdert niet aanroept, worden de records niet verwijderd.
U moet de functie in de procedure aanroepen. Ik weet niet zeker waarom je er een functie van hebt gemaakt, en het compileert toch niet, omdat het geen RETURN-component heeft. Laten we dat dus ook oplossen.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Nu noemen we het:
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;
Dus wanneer u uw anonieme blokkering uitvoert, worden de bestaande studenten verwijderd en vervangen door de nieuwe.