Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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
ça a marché. Je te remercie bien infiniment bien pour ton aide.
Merci !
Hors ligne
Pages : 1