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 :

Exception : Récupérer erreur


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut Exception : Récupérer erreur
    Bonjour,

    J'effectue l'instruction suivante en PL/PgSQL



    select op.op_code, compo.parenth_gauche, compo.parenth_droite into opCompo, gauche, droite
    from composition compo, operateur op
    where compo.var_id = 2 and compo.crit_id = 1 and compo.op_id = op.op_id;

    query := gauche || opCompo || droite;

    RAISE EXCEPTION 'TOTO';
    Je sais que la requête se passe bien et me retourne les bonnes valeurs.
    En revanche du moment que j'utilise la variable gauche ou la variable droite dans mon code, la fonction ne me retourne rien...

    Si je mets
    query := gauche || opCompo || droite;
    La fonction ne me retourne rien

    alors que si je mets
    query := opCompo;
    La fonction me retourne bien que chaine de caractères



    J'ai donc ajouté le
    RAISE EXCEPTION 'TOTO';
    qui me met un super message d'erreur, très explicite
    ERROR: TOTO

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

    ERROR: TOTO
    État SQL 0001
    N'y-a-t-il pas moyen de récupérer l'exception qui a engendré mon erreur.
    Je ne sais pas ce qui fait planter mon code...

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut
    snifff

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    L'erreur est celle que tu as généré toi-même : "TOTO".

    Pour ton premier soucis, peux-tu poster le code complet ? Avec des bouts de code comme ça c'est très difficile de voir ce qui peut clocher...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut
    Le code est entier,
    c'est juste que je l'ai décomposé par la suite pour expliquer chaque instruction.


    Pour l'exception, c'est effectivement mon message d'erreur, mais j'aimerais avoir l'équivalent d'une pile d'erreur pour savoir ce qui cloche.

    Du style
    RAISE EXCEPTION e
    Avec e qui soir ma pile d'exceptions

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut
    CREATE OR REPLACE FUNCTION build_compo(varId integer) RETURNS character varying AS
    $BODY$
    DECLARE
    gauche character varying := '';
    droite character varying := '';
    opCompo character varying := '';
    compos integer[];
    nbCompos integer := 0;
    ii integer := 0;

    query character varying := '';
    _operateur character varying := '';

    BEGIN

    -- On compte le nombre d'éléments qui forment la composition
    select count(*) into nbCompos from composition where var_id = varId;

    if nbCompos=0 then

    return null;

    else

    --On charge les éléments de la composition
    select into compos array(select crit_id from composition where var_id = varId order by indice);

    FOR ii IN 1..nbCompos LOOP

    --select compo.parenth_gauche, compo.parenth_droite, op.op_code into gauche, droite, opCompo from composition compo, operateur op where compo.var_id = var_id and compo.crit_id = compos[ii] and compo.op_id = op.op_id;
    select op.op_code, compo.parenth_gauche, compo.parenth_droite into opCompo, gauche, droite from composition compo, operateur op where compo.var_id = varId and compo.crit_id = compos[ii] and compo.op_id = op.op_id;


    -- ...et on construit la requête en fonction
    query := query || gauche || build_critere(compos[ii]) || droite || _operateur;
    --whereClause := whereClause || build_where_critere(compos[ii]) || ' ' || opCompo || ' ';

    END LOOP;

    end if;

    return query;

    END;
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE;
    ALTER FUNCTION build_compo(integer) OWNER TO postgres;

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Ah merci, avec tout le code c'est mieux !

    Dis-moi où sont déclarés "gauche" et "droite" ? Bizarre que ça compile...

    Si une exception était générée tu l'aurais récupérée de la même manière que celle que tu avais créée.

Discussions similaires

  1. Récupérer erreurs DTS
    Par elsuket dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/11/2006, 12h56
  2. [Exception] creation erreur.
    Par florantine dans le forum Langage
    Réponses: 1
    Dernier message: 13/01/2006, 20h26
  3. [XSL]Récupérer erreur de la fonction document() ?
    Par Chips dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 16/05/2005, 18h03
  4. [Exceptions] récupérer erreur oracle
    Par zach dans le forum Langage
    Réponses: 21
    Dernier message: 23/02/2005, 09h34
  5. [Exception] Récupérer l'exception correspondante
    Par Mister Nono dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2004, 18h47

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