Nous avons eu un débat cette semaine dans mon entreprise sur la façon dont nous devrions écrire nos scripts SQL.
Contexte : Notre base de données est Oracle 10g (mise à niveau vers 11 prochainement). Notre équipe de DBA utilise SQLPlus afin de déployer nos scripts en production.
Nous avons récemment eu un déploiement qui a échoué parce qu'il avait utilisé à la fois un point-virgule et une barre oblique ( /
). Le point-virgule se trouvait à la fin de chaque déclaration et la barre oblique entre les déclarations.
alter table foo.bar drop constraint bar1;
/
alter table foo.can drop constraint can1;
/
Quelques triggers ont été ajoutés plus tard dans le script, quelques vues ont été créées ainsi que quelques procédures stockées. Ayant à la fois le ;
et le /
entraînait l'exécution de chaque instruction deux fois, ce qui provoquait des erreurs (en particulier pour les insertions, qui devaient être uniques).
Dans SQL Developer cela ne se produit pas, dans TOAD cela ne se produit pas. Si vous exécutez certaines commandes, elles ne fonctionneront pas sans l'attribut /
en eux.
En PL/SQL, si vous avez un sous-programme (DECLARE, BEGIN, END), le point-virgule utilisé sera considéré comme faisant partie du sous-programme, vous devez donc utiliser la barre oblique.
Ma question est donc la suivante : Si votre base de données est Oracle, quelle est la bonne façon d'écrire votre script SQL ? Puisque vous savez que votre base de données est Oracle, devez-vous toujours utiliser l'option /
?
1 votes
Si quelqu'un fait une exportation de base de données avec SQLDeveloper, il y a une case à cocher appelée "Terminator" qui, lorsqu'elle est sélectionnée, utilise des points-virgules pour terminer chaque déclaration. Cette option est sélectionnée par défaut. Désélectionnez-la pour supprimer les points-virgules et éviter l'exécution d'instructions en double.
10 votes
Afin d'alimenter inutilement ce vieux sujet, je mentionnerai que le langage SQL n'a pas de point-virgule. Il s'agit simplement du caractère de fin de ligne par défaut dans SQL*Plus (vous pouvez paramétrer
sqlterminator
à!
si vous voulez) et cette convention tend à être suivie par d'autres outils. Le langage PL/SQL utilise toutefois le point-virgule comme élément syntaxique obligatoire.1 votes
@WilliamRobertson Vous devriez ajouter votre commentaire en tant que réponse puisque cette information est manquante dans les réponses.