Oracle
 sql >> Database >  >> RDS >> Oracle

istruzione delete non elimina i record

Lo farebbe se lo chiamassi, ma purtroppo non lo fai.

Questo non è un problema SQL, è un problema logico. Se non laviamo noi i piatti restano sporchi. Allo stesso modo, se non chiami la routine che elimina i record, i record non vengono eliminati.

Devi chiamare la funzione nella procedura. Non sono sicuro del motivo per cui l'hai resa una funzione e non verrà comunque compilata, perché non ha una clausola RETURN. Quindi, risolviamo anche quello.

CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
    DELETE FROM STUDENTS;
    return sql%rowcount; -- how many rows were deleted
END;
/

Ora lo chiamiamo:

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;

Quindi, quando esegui il blocco anonimo, gli studenti esistenti verranno eliminati e sostituiti con quelli nuovi.