Estou usando o seguinte loop PLSQL para excluir um grande número de registros da minha tabela. No entanto, está me dando um erro de que a condição de saída do loop não está correta.
FOR i IN 1..100
LOOP
DELETE
FROM mytable
WHERE date <= (SYSDATE - 30)
AND ROWNUM < 5000;
EXIT WHEN (SELECT COUNT(*)
FROM mytable
WHERE date <= (SYSDATE - 30)) = 0;
COMMIT;
END LOOP;
Qual é o problema aqui?
Deve ser um booleano simples. Isso deve funcionar e ser mais eficiente. O atributo SQL%ROWCOUNT será preenchido com o número de linhas excluídas. Se você não excluiu nenhum, basta sair.
Se você não estiver familiarizado com os atributos implícitos do cursor, dê uma olhada nos documentos do Oracle - https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/sql_cursor.htm
EDIT: Só reparei no título do post. A saída à qual a mensagem se refere é a saída do SQL*Plus e, como tal, não tenho certeza se você está executando isso da maneira certa. Por favor, poste todo o código e diga-nos como isso está sendo executado.