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

Requêtes PostgreSQL Discussion :

Procédure Stockés et Résultat


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre éclairé
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Par défaut Procédure Stockés et Résultat
    Bonjour
    J'ai écrit une procédure SQL


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    CREATE OR REPLACE FUNCTION _1nommultiniveaux3(integer)
      RETURNS SETOF record AS
    $BODY$
     
    SELECT "NOMENCLATURE"."NMC_ID", "NOMENCLATURE"."NMC_PERE", 2 AS niv
       FROM "NOMENCLATURE"
      WHERE ("NOMENCLATURE"."NMC_PERE" IN ( SELECT "NOMENCLATURE"."NMC_ID"
               FROM "NOMENCLATURE"
              WHERE ("NOMENCLATURE"."NMC_PERE" IN ( SELECT "NOMENCLATURE"."NMC_ID"
                       FROM "NOMENCLATURE" where
                      ("NOMENCLATURE"."NMC_PERE" IS NULL) and ("NOMENCLATURE"."NMC_ID"=$1)))))
    UNION
    SELECT "NOMENCLATURE"."NMC_ID", "NOMENCLATURE"."NMC_PERE", 1 AS niv
       FROM "NOMENCLATURE"
      WHERE ("NOMENCLATURE"."NMC_PERE" IN ( SELECT "NOMENCLATURE"."NMC_ID"
               FROM "NOMENCLATURE"
              WHERE ("NOMENCLATURE"."NMC_PERE" IS NULL) and ("NOMENCLATURE"."NMC_ID"=$1)))
    UNION
    SELECT "NOMENCLATURE"."NMC_ID", "NOMENCLATURE"."NMC_PERE", 0 AS niv
       FROM "NOMENCLATURE"
      WHERE ("NOMENCLATURE"."NMC_PERE" IS NULL) and ("NOMENCLATURE"."NMC_ID"=$1)
      ORDER BY 3;
     
     
    $BODY$
      LANGUAGE 'sql' VOLATILE
      COST 100
      ROWS 1000;
    J'obtiens un résultat avec des tuples de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "(1,,0)"
    "(2,1,1)"
    "(3,1,1)"
    "(4,2,2)"

    Comment faire pour avoir des colonnes séparées?
    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    bonjour ,je ferais comme ça
    1- tu crée un type qui correspond à la sortie que tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE type mon_type AS (champs1 type1,...)
    2- tu changes ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE FUNCTION _1nommultiniveaux3(integer)
      RETURNS SETOF mon_type as $BODY$
    declare 
    result as mon_type%rowtype;
    begin
     for result in  select  ....
    	loop
    		return next result;
    	end loop;
    	return   ;
    end;
    $BODY$
    3- tu appelles ta fonction de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from _1nommultiniveaux3(ta_valeur)

  3. #3
    Membre éclairé
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE FUNCTION _1nommultiniveaux3(integer)
      RETURNS SETOF mon_type as $BODY$
    declare 
    result as mon_type%rowtype;
    begin
     for result in  select  ....
    	loop
    		return next result;
    	end loop;
    	return   ;
    end;
    $BODY$
    J'ai une erreur :
    ERREUR: erreur de syntaxe sur ou près de « as »
    LIGNE 9 : result as mon_type%rowtype;

    ERREUR: erreur de syntaxe sur ou près de « as »
    État SQL :42601
    Caractère : 197

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    bonjour ,c'est une erreur de frappe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    result  mon_type%rowtype;
    ...

  5. #5
    Membre éclairé
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Par défaut
    Je l'ai déjà essayé.J'ai pratiquement le même code d'erreur
    ERREUR: erreur de syntaxe sur ou près de « montype »
    LIGNE 9 : resultat montype%rowtype;
    ^

    ********** Erreur **********

    ERREUR: erreur de syntaxe sur ou près de « montype »
    État SQL :42601
    Caractère : 198

  6. #6
    Membre éclairé
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Par défaut
    La solution est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from _1nommultiniveaux3(1) as tmp(NMCID integer,NMCPERE integer, NIV integer);
    Merci pour ton aide.

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    je ne comprends pas pourquoi "ma " solution ne marche pas car je l'ai deja testé avec succes
    mais ta methode est bien plus simple et elle marche!
    je l'adopte

  8. #8
    Membre éclairé
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Par défaut
    Bonjour
    Ta méthode m'intéresse également car elle peut être très utile dans certains cas. Si tu arrives à trouver la solution n'hésites pas à me la communiquer.
    Merci encore.

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

Discussions similaires

  1. Procédure stockée et résultat de requetes vides
    Par Harry dans le forum HyperFileSQL
    Réponses: 6
    Dernier message: 09/08/2012, 11h13
  2. Procédure stockée - récupérer résultat requete
    Par kanak09 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/08/2010, 13h48
  3. Réponses: 6
    Dernier message: 30/04/2010, 08h59
  4. [SQL Server]Recupération du résultat d'une procédure stockée
    Par navis84 dans le forum Bases de données
    Réponses: 8
    Dernier message: 04/04/2005, 20h53
  5. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 13h45

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