Itu akan terjadi jika Anda memanggilnya, tetapi sayangnya Anda tidak melakukannya.
Ini bukan masalah SQL, ini masalah logika. Jika kita tidak mencuci piring, piring akan tetap kotor. Demikian pula jika Anda tidak memanggil rutin yang menghapus catatan, catatan tidak akan dihapus.
Anda perlu memanggil fungsi dalam prosedur. Tidak yakin mengapa Anda menjadikannya fungsi, dan itu tidak akan dikompilasi, karena tidak memiliki klausa RETURN. Jadi, mari kita perbaiki juga.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Sekarang kami menyebutnya:
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;
Jadi, ketika Anda menjalankan blok anonim Anda, siswa yang ada akan dihapus dan diganti dengan yang baru.