Bonjour à tous!
Ma question est la suivante: je dois exécuter une commande sqlplus en "boucle" pour appeler une procédure stockée avec deux params issus d'un fichier csv.
Le résultat auquel j'arrive est le suivant:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
ORACLE_SID=MYBASE;
export ORACLE_SID;
for enreg in `cat $MYTMPPATH/$MYFILETOPARSE`
do
OLDVAL=`echo $enreg | awk -F";" '{ print $1 }'`;
NEWVAL=`echo $enreg | awk -F";" '{ print $2 }'`;
OLDVAL="'"$OLDVAL"'"
NEWVAL="'"$NEWVAL"'"
$ORACLE_HOME/bin/sqlplus -L monID/MonMDP >> $MYFILELOG
set serveroutput on;
whenever sqlerror exit 1 rollback;
whenever oserror exit 1 rollback;
exec P2300_integ_csv(${OLDVAL},${NEWVAL});
commit;
exit;
done |
Globalement:
1) Je ne suis pas très "satisfait", parce qu'il y a un souci sur le "exit" (qui permet de quitter le sqlplus), mais qui quitte l'exécution.
2) Je pense que je devrais sortir l'exécution de sqlplus du "do" pour l'ouvrir une fois pour toute... Mais je n'y parviens pas.
3) Mon PLUS GROS souci, c'est qu'au final, le script ne fonctionne pas sur le exec. JE ne vois pas du tout pourquoi.
sinon, pour les commandes awk, ça je suis certain que ça fonctionne, puisque j'ai testé sans la partie SQL, et j'ai affiché le contenu de mes variables OLDVAL et NEWVAL sans souci.
Si quelqu'un a une solution ou des indices à me filer... je suis preneur.
Sinon, j'ai un autre souci débile: j'ai un log dans lequel je veux piocher des lignes comme suit:
[plein de txt variable en lg][texte à lg variable à récup]
Schématiquement, je dois donc prendre toute la partie droite d'une ligne, à partir d'un point de texte identifié. Typiquement, ça donnerait un truc
[citation]SQL>Test valeur toto Erreur: donnée non conforme[/citation]
et je veux exporter uniquement
[citation]Erreur: donnée non conforme[/citation]
j'utilise, en test, ceci:
awk '/UPDATE/ {print $5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18}' $MYFILELOG > $MYPATH/$MYFILEROLLBACK
C'est crade, mais pour les tests ça fonctionne.
Quelqu'un a aussi une solution sur cet aspect?
En tout cas, toute proposition est bienvenue
Partager