Comment changer le répertoire courant dans SQL Plus sous Windows.
J'essaie d'écrire un script avec plusieurs commandes "@ filename".
Je sais que l'on peut ouvrir un script avec la commande Fichier -> Ouvrir, ce qui changera le répertoire actuel, mais je cherche un moyen de le faire automatiquement sans surveillance.
Sur la base de la réponse de Plasmer, j'ai défini la variable d'environnement SQLPATH dans Windows et j'ai obtenu quelque chose qui me convient. Je n'ai pas essayé de le définir avec la commande Host (je doute que cela fonctionne).
Pourquoi la réponse de Litytestdata est bonne, mais ne fonctionnera pas pour moi (les répertoires sont trop éloignés). Et bien sûr, la réponse de Guy selon laquelle cela ne peut pas être fait est également correcte. Je voterai pour ces deux voix et accepterai la réponse de Plasmer.
Pourriez-vous utiliser la variable d'environnement SQLPATH pour indiquer à sqlplus où chercher les scripts que vous essayez d'exécuter? Je pense que vous pouvez également utiliser Host pour définir SQLPATH dans le script.
Il pourrait y avoir des problèmes si deux scripts ont le même nom et que les deux répertoires se trouvent dans SQLPATH.
Voici ce que je fais.
Définissez une variable pour vous aider:
define dir=C:\MySYSTEM\PTR190\Tests\Test1
@&dir\myTest1.sql
Vous ne pouvez pas cd
dans SQL * Plus (vous pouvez cd
à l'aide de la commande Host, mais comme il s'agit d'un processus enfant, le paramètre ne persistera pas dans votre processus parent).
Je ne pense pas que vous puissiez changer le répertoire dans SQL * Plus.
Au lieu de changer de répertoire, vous pouvez utiliser @@filename
, qui lit dans un autre script dont l'emplacement est relatif au répertoire dans lequel le script en cours s'exécute. Par exemple, si vous avez deux scripts
C:\Foo\Bar\script1.sql C:\Foo\Bar\Baz\script2.sql
puis script1.sql
peut courir script2.sql
s'il contient la ligne
@@ Baz\script2.sql
Voir this pour plus d'informations sur @@
.
Je ne pense pas que vous puissiez!
/home/export/user1 $ sqlplus /
> @script1.sql
> Host CD /home/export/user2
> @script2.sql
script2.sql doit être dans /home/export/user1
.
Soit vous utilisez le chemin complet, soit vous quittez le script et redémarrez sqlplus
à partir du bon répertoire.
#!/bin/bash
oraenv .
cd /home/export/user1
sqlplus / @script1.sql
cd /home/export/user2
sqlplus / @script2.sql
(quelque chose comme ça - faire ça de mémoire!)
Avec le nouveau SQLcl d'Oracle, il y a maintenant une commande cd et un pwd qui l'accompagne. SQLcl peut être téléchargé ici: http://www.Oracle.com/technetwork/developer-tools/sqlcl/overview/index.html
Voici un petit exemple:
SQL>pwd
/Users/klrice/
NOT_SAFE>!ls *.sql
db_awr.sql emp.sql img.sql jeff.sql orclcode.sql test.sql
db_info.sql fn.sql iot.sql login.sql rmoug.sql
SQL>cd sql
SQL>!ls *.sql
003.sql demo_worksheet_name.sql poll_so_stats.sql
1.sql dual.sql print_updates.sql
SQL>
Avez-vous essayé de créer un raccourci Windows pour sql plus et de définir le répertoire de travail?
Je pense que la variable d'environnement SQLPATH est le meilleur moyen pour cela - si vous avez plusieurs chemins, entrez-les séparés par des points-virgules (;). Gardez à l'esprit que s'il existe des fichiers de script portant le même nom dans les répertoires, le premier rencontré (par ordre de saisie des chemins) sera exécuté, le second sera ignoré.
Des années plus tard, j'ai eu le même problème. Ma solution est la création d'un fichier batch temporaire et d'une autre instance de sqlplus:
Dans le premier SQL-Script:
:
set echo off
spool sqlsub_tmp.bat
Prompt cd /D D:\some\dir
Prompt sqlplus user/passwd@tnsname @second_script.sql
spool off
Host sqlsub_tmp.bat
Host del sqlsub_tmp.bat
:
Notez que "second_script.sql" a besoin d'une instruction "exit" à la fin si vous voulez revenir à la première ..