IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Aide requête sql


Sujet :

PostgreSQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut Aide requête sql
    Bonjour,

    Voici ma petite requête :
    $body$
    DECLARE
    nb_lignes BIGINT;
    BEGIN
    SELECT COUNT(membre_maj_id) INTO nb_lignes
    FROM membre_maj
    WHERE membre_maj_membre_id = $1
    AND membre_maj_membre_id_crypte = $2;
    IF nb_lignes=1 THEN
    /* instructions update*/
    ELSE
    /* instructions insert */
    END IF
    RETURN ;
    END;
    $body$
    LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;[/CODE]

    j'ai fait un type pour retourner nb_lignes mais je n'arrive pas à récupérer cette valeur de nb_lignes???

    Une petite aide serait appréciable

    Merci

    Merci

  2. #2
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    En fait l'affectation a une variable ce fait comme ca :
    SELECT INTO variable1,variable2 5,99

    ainsi pour ta requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT INTO nb_lignes COUNT(membre_maj_id)
    FROM membre_maj
    WHERE membre_maj_membre_id = $1
    AND membre_maj_membre_id_crypte = $2;

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    ah bon ?

    J'ai déjà fait ça : SELECT COUNT(membre_maj_id) INTO nb_lignes dans des requêtes et ça marche très bien...

  4. #4
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Oui sûr,

    En plPgSQL c'est bien cette syntaxe

    Le SELECT .... INTO ..... FROM ... est pour creer directement une table venant d'un jeu d'enregistrement.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Je te crois mais pourquoi ça fonctionne alors ? Oui j''ai lu que c'est assez laxiste et le INTO placé comme le mien fonctionne aussi.

    Quoiqu'il en soit ce n'est pas du à cela que je n'arrive pas à récupérer la variable nb_lignes en retour de la requête enfin je ne pense pas

  6. #6
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Effectivement j'ai vu sur certains sites qu'il y avait ta notation, personnelement je ne l'avais jamais utilisé.

    Peux tu faire l'essai avec l'autre methode ?

    Et il y a un autre truc que je viens de voir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF nb_lignes=1 THEN
    /* instructions update*/
    ELSE
    /* instructions insert */
    END IF
    Ce ne serait pas plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF nb_lignes!=0 THEN
    /* instructions update*/
    ELSE
    /* instructions insert */
    END IF

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    oui ça fonctionne avec l'autre syntaxe je viens d'essayer

    par contre quelle est la différence entre ce que tu me dis et ce que j'ai fait ? dans les deux cas ça fonctionne .

    Oui je vois pourquoi tu me demandes cela mais count ne sera jamais supérieur à 1

  8. #8
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    mais count ne sera jamais supérieur à 1
    en theorie mais on sait jamais....

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    ben si count = 3 alors la requete a foirée à un moment et ça craint pour postgresql quand même

    Enfin je n'ai toujours pas résolu mon problème comment retourner une valeur d'une variable en l'occurence ici nb_lignes car j'ai besoin de cette valeur dans mon script php.

  10. #10
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    si count = 3 alors la requete a foirée à un moment et ça craint pour postgresql quand même
    Remarque tres juste
    Pour recup dans ta fonction
    Tu declare ta procedure avec un type renvoyé int4, et que tu met return nb_lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $body$
    DECLARE
    nb_lignes BIGINT;
    BEGIN
    SELECT INTO nb_lignes
     COUNT(membre_maj_id) FROM membre_maj
    WHERE membre_maj_membre_id = $1
    AND membre_maj_membre_id_crypte = $2;
    IF nb_lignes=1 THEN
    /* instructions update*/
    ELSE
    /* instructions insert */
    END IF
    RETURN nb_lignes;
    END;
    $body$
    LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    pourquoi pas un type renvoyé bigint comme nb_lignes ?

  12. #12
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Comme tu veux, arrivera tu a la limite du INT ?

    Pour rappel :

    INT
    les entiers signés : de -2 147 483 648 à 2 147 483 647.
    les entiers non-signés : de 0 à 4 294 967 295.

    BIGINT
    les entiers signés : de -9 223 372 036 854 775 808 à 9 223 372 036 854 775 807. les entiers non-signés : de 0 à 18 446 744 073 709 551 615.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Ok super ça fonctionne ! merci !!!

    juste une dernière question, je passe ce week end de la version 8.0.3 à la 8.1.4 as-tu un conseil à me donner ou tout devrait se passer nickel ?

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    au fait si je dois retourner plusieurs variables je peux mettre RETURN var 1, var 2, var 3 et créer un type pour ce retour ?

  15. #15
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    le return ne renvoi qu'une valeur/variable
    mais il y a une parade, creer un type composite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE TYPE montype AS
       (val1 int2,
        val2 varchar,
        val3 int4);
    pour affecter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE
     mavar montype;
    BEGIN
     mavar.val1:=56;
     mavar.val2:='hpalpha';
     mavar.val3:=65;
     RETURN mavar;
    END;

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    alors là j'ai appris quelque chose ! merci !!!!!

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    mais je dois quand même déclarer ma procédure avec un type renvoyé ?

  18. #18
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    oui change le type de retour par ton nouveau type

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    ok ben grand merci j'ai progressé ce soir !!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LabView 8.5] Aide requêtes SQL Microsoft Access
    Par COLOMBAT dans le forum LabVIEW
    Réponses: 1
    Dernier message: 02/04/2008, 12h06
  2. Réponses: 4
    Dernier message: 13/11/2007, 23h23
  3. Aide Requête SQL
    Par jjg65 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/07/2007, 11h37
  4. Aide requête SQL - UPDATE phpmyadmin
    Par laulau37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/06/2007, 11h19
  5. Aide Requête SQL (UPDATE)
    Par Glowprod dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/07/2006, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo