Tester l'existence de tables ! Erreur louche ! - RESOLU - [UNIX/KSH] - Shell/Batch - Programmation
Marsh Posté le 12-05-2010 à 10:50:44
Bon, eh bien comme quoi ça aide de regarder son propre message : souvent on trouve le problème !
En fait lors de l'utilisation de la redirection de l'entrée standard, apparement on n'a pas le choix : il faut utiliser le mot clé 'EOF'
Là mon code plante avec le 'EOF1' lors du deuxième test d'existence de table, remplacé par 'EOF' ça passe !
Donc j'ai plus qu'à remercier mon moi-même et conseiller à mon premier moi de mieux se relire
En espérant que ça serve à quelqu'un d'autre.
See you soon !
Marsh Posté le 13-05-2010 à 21:38:18
Attention quand tu utilises des fichiers temporaires (style "compare_tmp.sql" ) car n'oublies pas que t'es en environnement multi-utilisateurs. A priori, rien n'interdit de lancer ton script plusieurs fois en parallèle. Mais il y aura grosse collision au niveau de ton fichier...
Déjà dans 80% des cas on peut éviter de créer un fichier temporaire. Mais si jamais on peut pas, alors toujours penser à lui mettre "$$" dans son nom. Ainsi, son nom sera associé au n° de pid qui est unique tant que le processus tourne.
Par ailleurs, t'as à ta disposition
/tmp
/var/tmp
$HOME/tmp
qui sont tous dédiés aux fichiers temporaires. Ca évitera de pourrir tous tes dossiers de fichiers résiduels inutiles...
Kerrozen a écrit :
|
export n'est utile que si les variables exportées ont besoin d'être connues d'un script fils qui sera appelé par celui-là
Apparemment ton script n'en appelle pas d'autre donc pas besoin de charger la table d'export.
Kerrozen a écrit :
|
Dommage de tester égal/pas égal à 4. A priori, il en faut au-moins 4 donc c'est pas grave si le gus en entre 150. Seuls les 4 premiers seront utilisés et pis voila.
Kerrozen a écrit :
|
Dommage d'appeler un aussi gros programme que awk pour extraire l'extension. echo $4 |cut -f2 -d. sera plus rapide...
Kerrozen a écrit :
|
$? est une variable numérique => [ $? -eq 0 ]
A priori, il n'y a aucune différence. Sauf que c'est plus propre d'utiliser les bons outils au bon endroit.
En plus, [ "$?" = "00" ] ne marche pas mais [ $? -eq 00 ] fonctionnera...
Kerrozen a écrit :
|
T'aimes pas le cut toi hein ???
Kerrozen a écrit :
|
Ouch tous ces echo redirigés !!!
T'as quand-même des outils plus sympa pour ce genre de truc
Exemple 1
Code :
|
Exemple 2
Code :
|
Kerrozen a écrit :
|
Dommage d'avoir créé un fichier "compare_tmp.sql" pour le recopier en final dans "compare.sql"
Exemple qui évite deux fichiers là où un seul suffirait...
Code :
|
Kerrozen a écrit :
|
Marsh Posté le 12-05-2010 à 10:28:51
Bonjour à tous,
Désolé à l'avance de la tartine, mais ayant peur de m'être perdu dans le code j'en mets un grand bout pour qu'on y voit plus clair....
Contexte : tester l'existence de tables, listées dans un fichier plat, sur deux schémas de la même instance ORACLE. On ne connaît pas le nombre de tables à l'avance bien sûr, sinon c'est pas drôle.
Suite à ces tests, construire un fichier SQL prêt à être passé pour effectuer une comparaison ligne à ligne des tables homonymes sur les deux schémas (la requête est bien lourde, oui je sais, mais je n'ai pas le choix pour cette requête de comparaison : moi ce qui me tracasse ce sont les tests d'existence des tables)
J'ai un souci qui est revenu plusieurs fois auparavant et que je n'arrive pas à m'expliquer : je fais deux tests SQL en passant les commandes via une redirection de l'entrée standard ( lignes avec << EOF et << EOF1 ) la première semble passer nickel, mais la deuxième plante avec le message d'erreur suivant :
Si quelqu'un avaitune idée, ça me serait très utile, autant pour ma culture perso que pour mes pu**** de scripts !
Merci d'avance
Voilà le code avec quelques commentaires :
Message édité par Kerrozen le 12-05-2010 à 10:51:38
---------------
En programmation, quand t'as un problème et qu'il n'y a que deux solutions valides, seule la troisième fonctionne !