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 Re : Migration » Migration de procédure de Sybase vers PostgreSQL » 03/04/2009 12:39:21

gleu a écrit :

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).

#2 Re : Migration » Migration de procédure de Sybase vers PostgreSQL » 03/04/2009 12:20:45

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) ?

#3 Re : Migration » Migration de procédure de Sybase vers PostgreSQL » 02/04/2009 23:43:47

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.

#4 Re : Migration » Migration de procédure de Sybase vers PostgreSQL » 02/04/2009 22:01:15

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';

Pied de page des forums

Propulsé par FluxBB