Vous n'êtes pas identifié(e).
Pages : 1
Le premier RETURN rencontré termine la procédure. Donc si on se trouve avec le return -101, on n'exécutera jamais le return 1.
Ce que je voulais dire c'est qu'un return(1) sous Sybase est normalement synonyme d'erreur.
Il semble que dans ce cas il devrait plutôt y avoir un return(0).
Il doit manquer un morceau de code (si COU_REF n'existe pas alors on renvoie -102).
Il faudrait peut-être découper la procédure en 2, d'une part la gestion COU_ID et COU_REF dans une première fonction (en incluant le COMMIT TRANSACTION puisque celui-ci n'a aucun effet sur le SELECT).
Puis une deuxième exécutant le SELECT dans un SETOF (le COU_ID et COU_REF existeront puisque le test aura déjà été effectué) avec un RETURN sans argument.
Je ne comprend pas bien pourquoi la procédure se termine par un inconditionnel return(1) ?
Rectification:
En lisant la documentation, il semble qu'une fonction renvoyant un SETOF ne peut se terminer qu'avec un RETURN sans argument:
CREATE FUNCTION maproc ()
RETURNS SETOF matable
AS
'
DECLARE r matable%rowtype;
BEGIN
FOR r IN SELECT * FROM matable LOOP
RETURN NEXT r;
END LOOP;
RETURN;
END;
'
LANGUAGE 'plpgsql';
Il doit probablement avoir une autre manière de faire pour résoudre le problème.
Je crois que la question est de retourner un jeu de résultat avec gestion d'un code retour.
Pour votre cas, ce serait quelque chose comme ça:
CREATE FUNCTION maproc ()
RETURNS integer
AS
'
BEGIN
SELECT * FROM matable;
RETURN 1;
END;
'
LANGUAGE 'plpgsql';
Pages : 1