Je dois exécuter plusieurs fichiers de script SQL en une fois.
Comme à chaque fois, je dois écrire une commande dans SQLPLUS
SQL> @d:\a.txt SQL> @d:\a2.txt SQL> @d:\a3.txt SQL> @ d:\a4.txt
existe-t-il un moyen de mettre tous les fichiers dans un dossier et d'exécuter tous les fichiers de script en une fois sans omettre aucun fichier, tel que @d:\final.txt
ou @d\final.bat
Il n'y a pas de commande SQL * Plus unique pour cela, mais vous pouvez créer un seul script qui appelle tous les autres:
Mettez ce qui suit dans un fichier batch
@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"
Lorsque vous exécutez ce fichier de commandes, il crée un nouveau script nommé all.sql
dans le même répertoire que celui où se trouve le fichier de commandes. Il recherchera tous les fichiers avec l'extension .sql
dans le même répertoire que le fichier de traitement par lots.
Vous pouvez ensuite exécuter tous les scripts en utilisant sqlplus user/pwd @all.sql
(ou étendre le fichier de commandes pour appeler sqlplus
après avoir créé le script all.sql
).
Cela vaut peut-être la peine d’écrire un script Shell qui exécute plusieurs fichiers.
#!/bin/ksh
sqlplus user/password@instance <<EOF
@a.txt
@a1.txt
exit
EOF
Pour plus d'informations sur la syntaxe, consultez Here Document
Certaines astuces et commandes peuvent vous aider à générer un fichier master.sql et vous pouvez le lancer à partir de cet emplacement.
c:\direcotory_location\dir *.sql /-t /b >master.sql
Accédez au répertoire parent open master.sql ouvert à l’aide de la ligne notepad ++ remove master.sql et utilisez une expression régulière pour remplacer
\n with \n @
aller à cmd De cmd
C:\root_directory\sqlplus user/password @master.sql
Je trouve ce processus très pratique si j'ai 30 à 40 scripts placés dans un seul répertoire.
Pour Windows, essayez de copier/b * .sql + x final.sql
sqlplus utilisateur/mot de passe @ final.sql
il existe une solution similaire, mais vous n’avez pas besoin d’itérer et d’avoir un nom de fichier SQL spécialement formaté. Vous composez un fichier SQL et ne l'exécutez qu'une fois.
cat table_animal.sql > /tmp/temp.sql
cat table_horse.sql >> /tmp/temp.sql
cat table_fish.sql >> /tmp/temp.sql
sqlplus USERNAME/PASSWORD@DOMAIN @/tmp/temp.sql
Si vous utilisez gnu linux, vous pouvez utiliser process substitution :
sqlplus USERNAME/PASSWORD@DOMAIN < <(cat a.txt a2.txt a3.txt a4.txt)
# ... or a for loop on input files, inside the process substitution
Vous pouvez également créer un fichier .pdc
et répertorier vos scripts SQL:
-- pdc file
@a.txt;
@a2.txt;
@a3.txt;
@a4.txt;
et appelez SQL plus:
sqlplus USERNAME/PASSWORD@DOMAIN < my_scripts.pdc
Utilisez le fichier d'extension *.PDC
comme ceci
install.pdc contenu du fichier
whenever sqlerror exit sql.sqlcode
Prompt started!
Prompt 1.executing script 1
@@install/01.script_1.sql
Prompt 2.executing script 2
@@install/02.script_2.sql
Prompt 3.executing script 3
@@install/03.script_3.sql
Prompt finished!
où @@install/
pointe dans quel répertoire se trouve le script SQL