Oracle SQL Developer: exécuter le script, continuer en cas d'erreur

Sep 02 2020

J'utilise SQL Developer 20.2 pour exécuter des scripts par lots pour les mises à jour de la base de données Oracle 12c. Je fais glisser et déposer le fichier de script dans la fenêtre de l'éditeur, puis clique sur le bouton "Exécuter le script (F5)". Pour une raison quelconque, le programme s'arrête si le script rencontre une erreur (instructions DDL - pas de lancement explicite d'une fonction PL / SQL).

Exemple:

drop sequence my_seq;  -- sequence may not exist yet
create sequence my_seq
  start with 1
increment by 1
    minvalue 1
    maxvalue 9999999999
       cache 100
       cycle;

L' dropinstruction peut rencontrer une erreur car la séquence n'existe pas. SQL * Plus ignore cette erreur et continue d'exécuter le script, mais SQL Developer arrête l'exécution, ce qui entraîne une mise à jour incomplète du correctif.

Que puis-je faire?

Réponses

4 RobertoHernandez Sep 02 2020 at 18:50

SqlDeveloper s'arrête par défaut lorsqu'il détecte une erreur. Vous pouvez modifier ce comportement en utilisant ceci:

whenever sqlerror continue;
drop sequence my_seq;  -- sequence may not exist yet, in case of error continue
-- then we want to stop in error
whenever sqlerror exit failure;
create sequence my_seq
  start with 1
increment by 1
    minvalue 1
    maxvalue 9999999999
       cache 100
       cycle;

Exemple

Explication

  • whenever sqlerror continue demande au script de continuer quelle que soit l'erreur qui pourrait survenir
  • whenever sqlerror exit failure demande au script d'arrêter et de quitter l'exécution en cas d'erreur.

Référence à la commande et aux options disponibles

chaque fois que sqlerror

thatjeffsmith Sep 02 2020 at 19:32

Cela ne devrait pas arriver. Par défaut, SQL Developer exécute tout le contenu de l'éditeur ou tout ce que vous avez sélectionné lorsque vous appuyez sur F5.

drop sequence my_seq;  

create sequence my_seq
  start with 1
increment by 1
    minvalue 1
    maxvalue 9999999999
       cache 100
       cycle;

F5

Vous pouvez voir que la suppression échoue, mais elle continue sur le CREATE. Tout cela en une seule fois