यदि आप इसे कॉल करते तो ऐसा होता, लेकिन अफसोस कि आप ऐसा नहीं करते।
यह एक SQL समस्या नहीं है, यह एक तर्क समस्या है। अगर हम धुलाई नहीं करते हैं तो बर्तन गंदे रहते हैं। इसी तरह यदि आप रिकॉर्ड्स को मिटाने वाले रूटीन को कॉल नहीं करते हैं तो रिकॉर्ड्स डिलीट नहीं होते हैं।
आपको प्रक्रिया में फ़ंक्शन को कॉल करने की आवश्यकता है। सुनिश्चित नहीं है कि आपने इसे एक फ़ंक्शन क्यों बनाया है, और यह वैसे भी संकलित नहीं होगा, क्योंकि इसमें रिटर्न क्लॉज नहीं है। तो चलिए इसे भी ठीक करते हैं।
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
DELETE FROM STUDENTS;
return sql%rowcount; -- how many rows were deleted
END;
/
अब हम इसे कहते हैं:
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;
इसलिए, जब आप अपना अनाम ब्लॉक चलाते हैं तो मौजूदा छात्रों को हटा दिया जाएगा और नए छात्रों के साथ बदल दिया जाएगा।