Si vous pouvez mettre cette section de contrôle dans son propre script, par ex. elcm_ctl.sql
, vous pourriez faire ça :
accept run_it char format a1 prompt "Run the script?"
set termout off
whenever sqlerror exit success rollback
exec if upper(nvl('&run_it', 'N')) != 'Y' then raise no_data_needed; end if;
whenever sqlerror continue
spool c:\elcm.sql
select 'select sysdate from dual;' from dual;
spool off
set termout on
spool c:\elcm_details.spl
@c:\elcm.sql
spool off
Le accept
commande
est un peu plus propre que de s'appuyer sur des invites de substitution, à mon avis, et est quelque peu auto-documenté. Cela invite l'utilisateur avec la chaîne spécifiée, plutôt que simplement 'gen'
. (Dans SQL * Plus, vous pouvez étendre cela et forcer l'utilisateur à insérer un seul caractère, en le redemandant s'il ajoute quelque chose de plus; et par défaut à 'N' s'il appuie simplement sur retour sans rien entrer. Mais SQL Developer ne prend en charge que un sous-ensemble de la fonctionnalité).
Ensuite, un petit bloc anonyme lève une exception - peu importe laquelle - si la valeur de la variable saisie n'est pas 'y'
ou 'Y'
. Pendant ce temps, j'ai set termout off
donc vous ne voyez pas l'exception réelle. Et j'ai utilisé whenever sqlerror
pour que le script se termine lorsque cette exception est déclenchée, donc tout ce qui vient plus tard n'est pas exécuté. C'est tout le reste dans le script de contrôle, pas seulement la requête suivante, mais vous pouvez avoir plusieurs sous-scripts si vous avez besoin d'être plus flexible.
Mais dans SQL Developer, termout
ne fonctionne comme prévu que lorsque vous exécutez via @
. Si vous exécutez le contenu de elcm_ctl.sql
directement à partir de la feuille de calcul SQL, vous verrez l'exception être déclenchée, ce qui est un peu moche. Donc, à la place, enregistrez ce script de contrôle et dans une feuille de calcul vide, faites simplement :
@c:\elcm_ctl.sql
Exécutez cette feuille de calcul en tant que script et vous y serez invité ; si vous saisissez 'Y'
vous verrez la sortie du script dans la fenêtre de sortie du script (sauf si vous laissez set termout off
dans le script de contrôle), et il créera le fichier spool. Si vous entrez autre chose, il n'exécutera pas le elcm.sql
fichier, n'affichera rien dans la fenêtre de sortie du script et ne créera pas de fichier spoule.