PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  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 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Problème fonction

Technique - général | Problème fonction

Par etien le 29/06/2006 - 14:50

Bonjour,

Je débute avec postgres.
J'ai fais une base avec des tables commandes et produits et une table de liaison.
Je voudrais faire un trigger qui verifie avant le delete d'un produit si dans la table de liaison il y a une commande en cours qui contient ce produit; si oui on ne deletepas le produit, sinon on peut le supprimer.

Voici la fonction que j'ai faite :

DECLARE

BEGIN
SELECT cp_co_id FROM commandes_produits WHERE cp_p_id=TG_ARGV[0];
RETURN OLD;
IF NOT FOUND THEN
DELETE FROM commandes WHERE co_id=OLD.cp_co_id;
RETURN OLD;
END IF;
RETURN OLD;
END;

et qui me renvoie :
SELECT query has no destination for data

pouvez vous m'aider ?
merci beaucoup

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

SELECT INTO

SAS/ = 29 Juin, 2006 - 15:20

Bonjour,

Dans une procédure stockée, le résultat d'un select doit être placé dans une variable.

Librement,
Stéphane Schildknecht


Merci beaucoup, Je n'ai pl

etien/ = 29 Juin, 2006 - 15:51

Merci beaucoup,

Je n'ai plus cette erreur mais une autre...
Voici ce que je fais desormais :
CREATE OR REPLACE FUNCTION verif(int8)
RETURNS _line AS
$BODY$BEGIN
SELECT cp_co_id INTO produit_verif FROM commandes_produits WHERE cp_p_id=$1;

IF NOT FOUND THEN
DELETE FROM commandes WHERE co_id=produit_verif.cp_co_id;

END IF;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;

et

CREATE OR REPLACE FUNCTION verif_produit()
RETURNS SETOF "trigger" AS
$BODY$BEGIN
-- NEW correspond à la ligne qui vient d'être créé/modifiée
-- PERFORM est nécessaire car la valeur de retour ne nous interesse pas
PERFORM verif(OLD.p_id);
RETURN OLD ;
END ;$BODY$
LANGUAGE 'plpgsql' VOLATILE;

mais j'ai l'erreur suivante maintenant :
missing FROM-clause entry for table product_verif

merci


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.