Script d'insertion

Résolu/Fermé
Bebendiaye - 6 juil. 2010 à 23:16
 Bebendiaye - 7 juil. 2010 à 21:51
Bonjour,

Merci de m'aider,
j'ai deux fichiers fich.sql et fich.txt

Dans fich.sql
select * from tb where mat in ()

dans fich.txt
|07864670434|HG|
|35687905435|EDHG|
|98767431212|OUKHGKKJ|

Pouvez vous m'aider a avoir un script shell qui va inserer ds la requete les valeurs du fich.txt
cad:
select * from tb where mat in ('07864670434','35687905435','98767431212')

Pour cet exemple fich.txt a trois enregistrements il peux en avoir 500 enregistrements.



A voir également:

3 réponses

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
7 juil. 2010 à 01:58
Ça doit se faire avec un LOAD DATA bien réglé :
https://dev.mysql.com/doc/refman/8.0/en/load-data.html

Bonne chacne
0
je ne vois pas comment!!
je dois recevoir regulierement fich.txt pour generer le fichier fich.sql avec le meme contenu seul les valeurs entre parenthese varie.
cad :('07864670434','35687905435','98767431212')
0
Hellllllo Merci de m'aider
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
7 juil. 2010 à 11:49
Salut,

A adapter à tes besoins...

[tmpfs]$ cat fich
|07864670434|HG|
|35687905435|EDHG|
|98767431212|OUKHGKKJ|
[tmpfs]$ cat foo.sh
#! /bin/sh

#set -xv

RECUP=$(egrep -o '[[:digit:]]+' fich)
DATA=$(echo $RECUP | sed "s/^\|$/'/g;s/ /','/g")

echo "select * from tb where mat in (${DATA})"

[tmpfs]$ ./foo.sh
select * from tb where mat in ('07864670434','35687905435','98767431212')
[tmpfs]$

;-))
0
j'ai des pb sur l'opion -o

D:\APBATCH\AP BATCH\SCRIPT_PROD\prod24\phase2>sh foo.sh
egrep: Unknown option -o
Usage: egrep [-clqinsvx] [-bI] [-e pattern] [-f patternfile] [pattern] [file ...]
select * from tb where mat in ()

D:\APBATCH\AP BATCH\SCRIPT_PROD\prod24\phase2>PAUSE
Appuyez sur une touche pour continuer...
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
7 juil. 2010 à 13:08
Emploies "sed" à la place :

RECUP=$(sed 's/[^[:digit:]]//g' fich)
0
ca marche mais si le fich contient qui des nombre il prend tous les nombre.
il ne doit prendre que les onze premier numbre c'est a dire la premier colonne.
exemple:

|07864670434|6535|MLDHLH|
|35687905435|093073HG|07309|
|98767431212|OUKHGKKJ|875385|
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
7 juil. 2010 à 17:20
[tmpfs]$ cat fich
|07864670434|6535|MLDHLH|
|35687905435|093073HG|07309|
|98767431212|OUKHGKKJ|875385|

[tmpfs]$ cat foo.sh
#! /bin/sh

#set -xv

RECUP=$(awk -F"|" '{ print $2 }' fich)
DATA=$(echo $RECUP | sed "s/^\|$/'/g;s/ /','/g")

echo "select * from tb where mat in (${DATA})"

[tmpfs]$ ./foo.sh
select * from tb where mat in ('07864670434','35687905435','98767431212')
[tmpfs]$

;-))
0
Merci ca marche je vous remerci et bonne apres midi
0