sql >> Base de Datos >  >> RDS >> Oracle

eliminar declaración no eliminar registros

Lo haría si lo llamaras, pero lamentablemente no lo haces.

Esto no es un problema de SQL, es un problema de lógica. Si no lavamos los platos, los platos quedan sucios. Del mismo modo, si no llama a la rutina que elimina los registros, los registros no se eliminan.

Debe llamar a la función en el procedimiento. No estoy seguro de por qué lo ha convertido en una función, y no se compilará de todos modos, porque no tiene una cláusula RETURN. Entonces, arreglemos eso también.

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

Ahora lo llamamos:

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;

Entonces, cuando ejecute su bloqueo anónimo, los estudiantes existentes serán eliminados y reemplazados por los nuevos.