Oracle
 sql >> Datenbank >  >> RDS >> Oracle

delete-Anweisung löscht keine Datensätze

Es würde, wenn Sie es anrufen würden, aber leider tun Sie es nicht.

Das ist kein SQL-Problem, sondern ein Logikproblem. Wenn wir nicht abwaschen, bleibt das Geschirr schmutzig. Ebenso werden die Datensätze nicht gelöscht, wenn Sie die Routine nicht aufrufen, die die Datensätze löscht.

Sie müssen die Funktion in der Prozedur aufrufen. Nicht sicher, warum Sie es zu einer Funktion gemacht haben, und es wird sowieso nicht kompiliert, weil es keine RETURN-Klausel hat. Also, lassen Sie uns das auch beheben.

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

Jetzt nennen wir es:

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;

Wenn Sie also Ihren anonymen Block ausführen, werden die vorhandenen Schüler gelöscht und durch die neuen ersetzt.