SQL: Exécution script SQL avec données venant de fichier CSV

Bonjour,
je voudrais exécuter cette commande dans un script shell avec pour source un fichier CSV (cf. exemple en dessous du code).

INSERT into rasso_grp_tiers (id_groupe, numbenef, idg_regie) SELECT groupe_tiers.id, tiers.numbenef, tiers.idg_regie FROM rhabitue AS tiers, rgroupe_tiers AS groupe_tiers WHERE tiers.numbenef IN (SELECT numbenef FROM rhabitue WHERE code_tiers='A') AND tiers.idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers='A') AND groupe_tiers.id IN (SELECT id FROM rgroupe_tiers WHERE libelle = 'B' AND idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers='A'));

Exemple fichier tiers_groupe.csv
[ul]code_tiers;libelle
9400001;Groupe1;
9400002;Groupe1;
9400003;Groupe1;
9400004;Groupe1;
9400005;Groupe2;
9400006;Groupe1;
9400007;Groupe3;
9400008;Groupe3;
9400009;Groupe3;
9400010;Groupe3;
9400011;Groupe3;
9400012;Groupe4;
9400013;Groupe4;
9400014;Groupe4;
9400015;Groupe4;
[/ul]

Je veux donc exécuter pour chaque ligne (sauf la 1ère, code_tiers;libelle) la commande SQL. Comment Faire?

PS: je ne peux pas créer de table temporaire et j’utilise PostgreSQL.

Cordialement,
Vandman

Je vais m’auto répondre, j’ai trouver la solution.

[code]#!/bin/sh

echo $port_num
echo -n "Entrez le nom d’utilisateur PostgreSQL : "
read UserPG

case $UserPG in
"") echo "Pas d’utilisateur PostgreSQL définit\n"
exit 1;; #exit shell script

* ) echo "Bienvenu $UserPG\n";;

esac

echo -n "Mot de passe : "
read PGpassword

case $PGpassword in
"") echo "Pas de mot de passe PostgreSQL définit\n"
exit 1;; #exit shell script
*) echo “Votre mot de passe à bien été pris en compte\n”;;
esac

echo -n "Ip ou non du serveur PostgreSQL? "
read PGhostname

case $PGhostname in
"") echo "Pas d’hôte PostgreSQL définit\n"
exit 1 ;; #exit shell script
*) echo “L’hôte ou l’IP PostgreSQL est $PGhostname\n”;;
esac

echo -n "Port du serveur PostgreSQL? "
read port_num

case $port_num in
"") port_num=5432
echo “Le port par défaut $port_num sera utilisé\n”;;

*) echo "Le port par défaut $port_num sera utilisé\n";;

esac

echo -n "Nom de la base de donnée pour LorainNG? "
read lorrainng_db

case $lorrainng_db in
"" ) echo "Pas de base de donnée PostgreSQL définit\n"
exit 1;; #exit shell script
*) echo “L’hôte ou l’IP PostgreSQL est $PGhostname\n”;;
esac

touch $HOME/.pgpass
chmod 0600 $HOME/.pgpass
echo “$PGhostname:$port_num:$lorrainng_db:$UserPG:$PGpassword” > $HOME/.pgpass
csv_DirectoryLocation=$(pwd)
echo -n "Le fichier CSV se trouve-t-il dans le répertoire suivant? \n $csv_DirectoryLocation : [Oui] ou [Non]"
read answer
case $answer in
Oui|OUI|oui|O|o ) csv_location=$csv_DirectoryLocation/asso_tiers_groupe.csv
echo “Le fichier se trouve dans: $csv_location”;;
Non|NON|non|N|n ) echo -n "Dans quel répertoire se trouve le fichier asso_tiers_regie.csv?\n"
read csv_EntryLocation
csv_location=$csv_EntryLocation/asso_tiers_groupe.csv
echo “Le fichier se trouve donc bien dans: $csv_location\n”;;
*) “Au revoir…\n”;;
esac

for ligne in cat $csv_location
do
echo $ligne
code_tiers_csv=echo $ligne | awk -F";" '{ print $1 }'
echo "code_tiers_csv = $code_tiers_csv"
libelle_groupe_csv=echo $ligne | awk -F";" '{ print $2 }'
echo “libelle_groupe_csv = $libelle_groupe_csv”

psql -h $PGhostname -p $port_num $lorrainng_db -U $UserPG << EOF

INSERT into lorrainng_role.rasso_grp_tiers (id_groupe, numbenef, idg_regie)

SELECT group_tiers.id, tiers.numbenef, tiers.idg_regie
FROM lorrainng_role.rhabitue AS tiers, lorrainng_role.rgroupe_tiers AS group_tiers
WHERE tiers.numbenef IN (SELECT numbenef FROM lorrainng_role.rhabitue WHERE code_tiers = ‘$code_tiers_csv’ AND numbenef_ref=‘0’)
AND tiers.idg_regie IN (SELECT idg_regie FROM lorrainng_role.rhabitue WHERE code_tiers = ‘$code_tiers_csv’)
AND group_tiers.id IN (SELECT id FROM lorrainng_role.rgroupe_tiers WHERE libelle = ‘$libelle_groupe_csv’ AND idg_regie IN (SELECT idg_regie FROM lorrainng_role.rhabitue WHERE code_tiers = ‘$code_tiers_csv’ AND numbenef_ref=‘0’));
EOF

done

PGpassword=""
rm $HOME/.pgpass
[/code]

Cordialement