web-dev-qa-db-fra.com

voulez exécuter plusieurs fichiers de script SQL en une fois avec SQLPLUS

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

7
rahul jain

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).

10

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

2
Eric

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.

2
Manoj

Pour Windows, essayez de copier/b * .sql + x final.sql

sqlplus utilisateur/mot de passe @ final.sql

1
AmolG

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
1
Cyva

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
1
carmellose

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!

@@install/ pointe dans quel répertoire se trouve le script SQL

0
Jibo

Un merci spécial à Joseph Torre

sqlplus login/password@server @filename

lien de référence

0
vinay kumar reddy