Bonjour,
Je suis confronté au problème suivant :
depuis un script PHP je procède à des INSERT dans une table acheteur :
try {
$sql = "INSERT INTO acheteur(cod_id,siret,raisonsoc,typo,adresse,comptable,url)"
." values(:cod_id,:siret,:raisonsoc,:typo,:adresse,:comptable,:url)";
$stmt= $dbh->prepare($sql);
$stmt->BindParam(':cod_id',$tab[1]);
$stmt->BindParam(':siret',$tab[2]);
$stmt->BindParam(':raisonsoc',$tab[4]);
$stmt->BindParam(':typo',$tab[5]);
$stmt->BindParam(':adresse',$tab[6]);
$stmt->BindParam(':comptable',$tab[7]);
$stmt->BindParam(':url',$tab[12]);
$stmt->execute();
$stmt->closeCursor();
...
Côté base de données, j'ai créé un trigger afin d'actualiser un champ de la table prereg (suite à l'ajout d'un enregistrement dans la table acheteur) :
create trigger inactiverPrereg
after insert on acheteur
for each row execute procedure inactiverPrereg();
et la fonction :
create or replace function inactiverPrereg() returns trigger as '
declare
inscrits_cursor cursor for select email from prereg,acheteur where acheteur.siret=prereg.siret and prereg.actif=true;
email prereg.email%TYPE;
begin
open inscrits_cursor;
loop
fetch inscrits_cursor into email;
EXIT WHEN NOT FOUND;
update prereg set actif=false where prereg.email=email;
end loop;
close inscrits_cursor;
end;
' language 'plpgsql';
Lorsque je lance mes insertions via le client PHP, j'obtiens le résultat suivant :
SQLSTATE[2F005]: Function executed no return statement: 7 ERROR: control reached end of trigger procedure without RETURN CONTEXT: PL/pgSQL function "inactiverprereg"
Je précise que les insertions dans la table acheteur fonctionnent quand je supprime le trigger...
Si quelqu'un est en mesure de m'expliquer ce qui cloche, je le bénis d'avance :-)
Patrick Charda
Partager