Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

instrução delete não excluindo registros


Seria se você o chamasse, mas, infelizmente, você não o faz.

Este não é um problema de SQL, é um problema de lógica. Se não lavarmos a louça, a louça continua suja. Da mesma forma, se você não chamar a rotina que exclui os registros, os registros não serão excluídos.

Você precisa chamar a função no procedimento. Não tenho certeza por que você fez uma função, e ela não compilará de qualquer maneira, porque não possui uma cláusula RETURN. Então, vamos corrigir isso também.
CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
    DELETE FROM STUDENTS;
    return sql%rowcount; -- how many rows were deleted
END;
/

Agora chamamos de:
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;

Assim, quando você executar seu bloco anônimo, os alunos existentes serão excluídos e substituídos pelos novos.