Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 15/04/2011 15:41:46
- ZouZou
- Membre
Code retour d'une instruction sql vide
Bonjour, bonjour ,
Je viens vous solliciter car j’ai un petit problème dans l’élaboration d’un script.
Je vous explique, je suis en stage actuellement et j’utilisé Postgresql (pour la première fois). Je me suis plutôt vite familiarisé avec l’éléphant mais pas encore assez pour qu’il me dévoile tout ses secrets !
Mon problème est que je crée donc un script en Perl et j’interroge une base de données avec un simple select . Tout ce passe très bien…. Sauf quant il n’y a pas de valeurs en réponse a ma requête.
En gros si j’effectue cette requête avec une valeur qui n’existe pas, directement dans ma base j’obtiens un jolie (0 row) (ce qui est normal vous me direz ^^). Oui ! élas j’ai besoin du résultat de cette requête, même s’il n’y a rien à retourner pour effectuer un test.
Je me demande s’il est possible de récupère un numéro ou quelque chose comme un code retour, permettant d’identifier un résultat vide ??? auriez-vous une idée ^^ ?
J’espère que j’ai été claire ^^.
Cordialement ZouZou.
Hors ligne
#2 15/04/2011 15:43:22
- gleu
- Administrateur
Re : Code retour d'une instruction sql vide
Il vous faut vérifier le nombre de lignes. Il doit existe une fonction pour ça en Perl. (en PHP, il s'agit pg_num_rows())
Guillaume.
Hors ligne
#3 15/04/2011 15:48:33
- ZouZou
- Membre
Re : Code retour d'une instruction sql vide
Bonjour Gleu,
merci pour ta réponse très rapide .
j'ai oublié de mentionné que je débute également en perl.
Pour ma défense je n'ai pas vue d'option row pour le module DBI dans les docs que j'ai trouvé. ^^
je vais donc orienté mes recherches sur ce qui pourrait s'en rapprocher !
et vous tiendrais au courant !! merci
Hors ligne
#4 15/04/2011 15:49:39
- Marc Cousin
- Membre
Re : Code retour d'une instruction sql vide
Pour donner une réponse un peu plus approfondie :
- On peut obtenir le nombre d'enregistrements retournés par une requête: c'est l'attribut «rows» de l'objet statement handler de la méthode dbi (celui qui est appelé sth partout dans la doc)
- On peut tout simplement regarder la taille du tableau retourné si on fait un fetchall_arrayref, par exemple… (un scalar du tableau…)
Dernière modification par Marc Cousin (15/04/2011 15:49:59)
Marc.
Hors ligne
#5 15/04/2011 15:51:51
- Marc Cousin
- Membre
Re : Code retour d'une instruction sql vide
Par exemple, en partant de l'hypothèse que le handler de session à la base ($dbh) est déja initialisé :
my $sth=$dbh->fetchall_arrayref('SELECT * from toto');
if ($sth->rows == 0)
{
print "il n'y a rien\n";
}
Marc.
Hors ligne
#6 15/04/2011 16:00:04
- ZouZou
- Membre
Re : Code retour d'une instruction sql vide
j'ai un peut honte :$ ça fait deux jours que je m'arrache les cheveux sur ce problème et au final c'est pas compliquer du tout a résoudre. T_T
je vous remercie pour vos réponses et de vos explications !!! j'ai encore gagné en connaissance encore aujourd'hui grâce a vous ^^:p.
PS: je passe régulièrement sur votre forum et apprécie la qualité de vos réponses ! UN GRAND MERCI
Cordialement ZouZou
Hors ligne
#7 05/07/2011 17:24:20
- gilou974
- Membre
Re : Code retour d'une instruction sql vide
Bonjour à tous,
je me permets de faire un up pour demander si dans un script shell (bin/bash) on peut récupérer le résultat de la commande sql également et comment çà se passe donc si on doit tester le nombre de lignes.
Merci par avance.
Hors ligne
#8 05/07/2011 21:15:54
- gleu
- Administrateur
Re : Code retour d'une instruction sql vide
Oui, on peut. C'est pas simple, c'est même franchement ennuyant mais c'est possible. Cela étant dit, quand on veut se simplifier la vie, on utilise autre chose que bash : par exemple perl, python, php, etc.
Guillaume.
Hors ligne
#9 06/07/2011 10:08:29
- gilou974
- Membre
Re : Code retour d'une instruction sql vide
Merci pour votre réponse,
et bien j'ai plus qu'à me mettre à python ou perl alors...
Hors ligne
#10 18/07/2011 15:36:01
- David
- Membre
Re : Code retour d'une instruction sql vide
Hello, non pas facile, du bash quoi, mais à la (b)hâche on arrive à faire qq chose !
Pour compter le nombre de lignes et tester le code retour on peut tenter ce qu'il y a ci-dessous.
>> "récupérer le résultat de la commande sql " ?
D'autre part, pour obtenir le résultat du listing, il faut employer l'option -o (output) de psql.
David.
$>echo "Nombre tuples : " ; psql -Ubd bd -t -c "select count(*) from matab" ; err=$?; echo "Code retour commande :" ; echo $err
Nombre tuples :
18994554170
Code retour commande :
0
$>echo "Nombre tuples : " ; psql -Ubd bd -t -c "select count(*) from matab where 1=2" ; err=$?; echo "Code retour commande :" ; echo $err
Nombre tuples :
0
Code retour commande :
0
$>echo "Nombre tuples : " ; psql -Ubd bd -t -c "SSSS count(*) from matab" ; err=$?; echo "Code retour commande :" ; echo $err
Nombre tuples :
ERROR: syntax error at or near "SSSS"
LINE 1: SSSS count(*) from matab
^
Code retour commande :
1
Hors ligne
#11 21/07/2011 14:09:11
- SQLpro
- Membre
Re : Code retour d'une instruction sql vide
Récrivez votre requête comme ceci :
WITH
T AS
(select count(*) AS N from matab)
SELECT COALESCE((SELECT N FROM T), 0) AS RESULTAT
A
Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES, Expert langage SQL
Le site sur les SGBD relationnel et langage SQL : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * * Enseignant CNAM PACA, ISEN Toulon, CESI Aix en Provence * * * * *
Hors ligne
Pages : 1