Vous n'êtes pas identifié(e).

#1 15/04/2011 15:41:46

ZouZou
Membre

Code retour d'une instruction sql vide

Bonjour, bonjour smile,

Je viens vous solliciter  car j’ai un petit problème dans l’élaboration d’un script. smile

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 wink. Tout ce passe très bien…. Sauf quant il n’y a pas de valeurs en réponse a ma requête. hmm

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 smile.

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 smile

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 smile :

- 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 smile

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

Pied de page des forums