web-dev-qa-db-fra.com

SQL Plus change le répertoire courant

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.


Résolution

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.

15
Andrew Stein

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.

9
Plasmer

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

20
Tom

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

10
Luke Woodward

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

4
Guy

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>
2
Kris Rice

Avez-vous essayé de créer un raccourci Windows pour sql plus et de définir le répertoire de travail?

2
Chetan Sastry

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

2
eRick

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

2
IOIO