Hi all!
Je poste ma question ici même si c'est une question mixte Oracle/Unix(SunOS5.8)...
J'ai deux scripts: un sh et un sql. Je cherche à écrire avec le sql dans un fichier grâce à UTL_FILE:
extrait plsql:
La variable '&1' est définie dans le script unix de la manière suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 BEGIN /*do stuff*/ file_handle := UTL_FILE.FOPEN(&1,time_stamp||'_stats_replication.txt','A'); /*do more stuff*/ EXCEPTION /* gestion des erreurs*/ END;
extrait sh:
J'utilise cette méthode car je travaille avec plusieurs environnements et j'aimerai ne pas mettre en dur le chemin dans le script sql (ce qui bien évidemment marche très bien).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4STAT_REPT=/index/nom_du_serveur/log var=$STAT_REPT sqlplus -s $IFSAPPLOGIN @$SQL_REPT/SPSTATREPL.sql $var >> $LOG_FILE
Mon soucis c'est que lorsque j'exécute le script unix je me mange l'erreur suivante:
Je suis bien conscient que le problème vient de la chemin qui contient des slash et qui n'est pas entre quotes donc j'ai déjà essayé ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 old 44: file_handle := UTL_FILE.FOPEN(&1,time_stamp||'_stats_replication.txt','A'); new 44: file_handle := UTL_FILE.FOPEN(/index/di1ifs/dlk_data/log,time_stamp||'_stats_replication.txt','A'); file_handle := UTL_FILE.FOPEN(/index/di1ifs/dlk_data/log,time_stamp||'_stats_replication.txt','A'); * ERROR at line 44: ORA-06550: line 44, column 35: PLS-00103: Encountered the symbol "/" when expecting one of the following: ( ) - + mod not null others <an identifier> <a double-quoted delimited-identifier> <a bind variable> table avg count current exists max min prior sql stddev sum variance execute multiset the both leading trailing forall year month DAY_ HOUR_ MINUTE_ second TIMEZONE_HOUR_ TIMEZONE_MINUTE_ time timestamp interval date <a string literal with character set specification> <a number> <a single-quoted SQL string>
unix:
Ainsi que de concaténer des quotes dans la partie sql ou encore de faire un replace des slash en sql, cela ne marche pas non plus...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 x=$STAT_REPT var="'"x"'" sqlplus -s $IFSAPPLOGIN @$SQL_REPT/SPSTATREPL.sql $var >> $LOG_FILE
Quelqu'un a une idée?
[EDIT]: petit ajout avant d'avoir cette suggestion que j'ai essayé également, je ne dispose pas des droits dba donc les requêtes sur les tables: DBA_DIRECTORIES ou ALL_DIRECTORIES ne me sont pas autorisées...
Partager