Nó sẽ nếu bạn gọi nó, nhưng than ôi bạn không.
Đây không phải là một vấn đề SQL, nó là một vấn đề logic. Nếu chúng ta không rửa bát đĩa vẫn bẩn. Tương tự, nếu bạn không gọi quy trình xóa các bản ghi, các bản ghi sẽ không bị xóa.
Bạn cần gọi hàm trong thủ tục. Không chắc tại sao bạn lại biến nó thành một hàm và nó sẽ không biên dịch, bởi vì nó không có mệnh đề RETURN. Vì vậy, chúng ta cũng hãy khắc phục điều đó.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
Bây giờ chúng tôi gọi nó là:
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;
Vì vậy, khi bạn chạy khối ẩn danh của mình, các sinh viên hiện tại sẽ bị xóa và thay thế bằng những sinh viên mới.