PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 05/07/2013 14:46:19

atchopba
Membre

Problème INTO dans une procédure stockée

Bonjour,

j'ai crée une fonction qui est utilisée dans un trigger. J'ai bien déclarée des variables, mais il y a toujours un hic: un problème avec le INTO. J'ai comme l'impression qu'il ne veut pas de ma variable par la requête est pleine de JOIN.

----
CREATE OR REPLACE FUNCTION update_arcligne_update_arret_image_etiquette() RETURNS TRIGGER AS
$BODY$
DECLARE
    idNoeud_arret INTEGER;
   
BEGIN
    IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN
        SELECT id_arret INTO idArret FROM
                    SELECT rtna.id_noeud_arret INTO idNoeud_arret, rtna.nom, l.id_ligne, l.numero
                         FROM res_arret rtna
                    JOIN res_no n ON n.id_noeud = rtna.id_noeud_arret
                    JOIN arc arc ON arc.id_amont = n.id_noeud OR arc.id_aval = n.id_noeud
                    JOIN res_ligne rtal ON rtal.id_arc = arc.id_arc
                    JOIN ligne l ON l.id_ligne = rtal.id_ligne
                    ORDER BY rtna.id_noeud_arret;
                    WHERE id_ligne = NEW.id_ligne AND id_arc = idArc;
----

Et l'erreur est la suivante :

ERREUR:  « idnoeud_arret » n'est pas une variable connue
LINE 21:   SELECT id_noeud_arret INTO idNoeud_arret FROM

Merci de me venir en aide.

Hors ligne

#2 06/07/2013 00:44:22

gleu
Administrateur

Re : Problème INTO dans une procédure stockée

Ce code est syntaxiquement incorrect. Il y a une variable idArret non déclaré sur le premier SELECT. Sur le deuxième, le SELECT devrait récupérer quatre colonnes mais il n'en récupère qu'une , ce qui ne fonctionnera pas. Bref, corrigez un peu ça pour commencer.


Guillaume.

Hors ligne

#3 08/07/2013 09:04:31

atchopba
Membre

Re : Problème INTO dans une procédure stockée

Je m'excuse de n'avoir pas tout vérifier quand j'ai fait mon post sur le forum. La requête est ci-bas. Donc d'après ce que tu as dit, si j'ai probablement bien compris, c'est qu'il faut que je mette des INTO sur toutes les colonnes ?

----
CREATE OR REPLACE FUNCTION update_arcligne_update_arret_image_etiquette() RETURNS TRIGGER AS
$BODY$
DECLARE
    idNoeud_arret INTEGER;

BEGIN
    IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN
                    SELECT rtna.id_noeud_arret INTO idNoeud_arret, rtna.nom, l.id_ligne, l.numero
                         FROM res_arret rtna
                    JOIN res_no n ON n.id_noeud = rtna.id_noeud_arret
                    JOIN arc arc ON arc.id_amont = n.id_noeud OR arc.id_aval = n.id_noeud
                    JOIN res_ligne rtal ON rtal.id_arc = arc.id_arc
                    JOIN ligne l ON l.id_ligne = rtal.id_ligne
                    ORDER BY rtna.id_noeud_arret;
                    WHERE id_ligne = NEW.id_ligne AND id_arc = idArc;
----

Merci bien !

Hors ligne

#4 09/07/2013 00:35:19

gleu
Administrateur

Re : Problème INTO dans une procédure stockée

Il faudrait plutôt quelque chose comme

SELECT INTO noeud rtna.id_noeud_arret, rtna.nom, l.id_ligne, l.numero

avec noeud défini comme un record.


Guillaume.

Hors ligne

#5 09/07/2013 08:48:52

atchopba
Membre

Re : Problème INTO dans une procédure stockée

ça a marché. Je te remercie bien infiniment bien pour ton aide.

Merci !

Hors ligne

Pied de page des forums