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

#26 Re : Migration » [] smallint en paramètre in out d'une fonction » 17/01/2014 17:40:12

En fait, j'ai quand même un souci : les champs INOUT ne sont pas modifiés. Ils sont juste fournis en copie dans la variable dans le RETURN ...

CREATE OR REPLACE FUNCTION p_test(test character varying)
  RETURNS void AS
$BODY$
DECLARE 
	LC$test		numeric:=0;
	cd_ret2 varchar;

BEGIN
	CD_RET2:=f_test2 (LC$test);		
	raise notice 'Valeur : %',LC$test;
	return;
END ;
$BODY$
  LANGUAGE plpgsql VOLATILE;


CREATE OR REPLACE FUNCTION f_test2(INOUT ma_var numeric)
  RETURNS numeric AS
$BODY$
DECLARE
  
BEGIN

ma_var:=ma_var+1;

END ;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Donne

select p_test (null);

NOTICE:  Valeur : 0
NOTICE:  Valeur : 0
NOTICE:  Retour : 1

Si j'ai plein de variables en entrée, le type en sortie est "record", que je peux récupérer en varchar par exemple.

Mais comment remettre les variables modifiées dans celles que j'avais fournies en paramètre ?
En gros, si je fais un F_calcul (Var1, Var2, Var3, Var4, Var5)
je voudais que mes variables Var1 à Var5 soient modifiées. Sous Oracle, il n'y avait besoin d'aucune manipulation mais je suis prêt à rajouter quelques instructions ... neutral

#28 Re : Migration » [] smallint en paramètre in out d'une fonction » 18/12/2013 01:47:00

Bonsoir,

Voilà ce que j'obtiens :

CREATE OR REPLACE FUNCTION PEC_LEP (LK$TP_E INTEGER,
                      LK$HR_E INTEGER,
                      LK$LEP IN OUT LEP,
                      LK$LG1 IN OUT INTEGER,
                      LK$LG2 IN OUT INTEGER,
                      LK$LISTE IN OUT SMALLINT[])
  RETURNS INTEGER AS
...


ERREUR:  le type de résultat de la fonction doit être record à cause des paramètres OUT

********** Erreur **********

ERREUR: le type de résultat de la fonction doit être record à cause des paramètres OUT
État SQL :42P13

Je débute en pgsql, et je ne saisis pas comment il faut mettre les paramètres ...

#29 Migration » [] smallint en paramètre in out d'une fonction » 17/12/2013 14:44:29

Xav1er
Réponses : 18

bonjour,

Je voudrais migrer une fonction Oracle vers Pgsql.
La fonction a des paramètres in out, dont un tableau d'entiers.

Pour la faire fonctionner sous Oracle, j'avais créé un package pour pouvoir passer un tableau d'entiers dont voici le descriptif :

CREATE OR REPLACE
PACKAGE PCK_LEP IS

  TYPE TP$TABLE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;

  PROCEDURE P_LEP(LK$DT1 VARCHAR2, LK$DT2 VARCHAR2) ;

  FUNCTION MAJ_LEP (LK$LEP  LEP%ROWTYPE,
					LK$LISTE    TP$TABLE)
					RETURN NUMBER;
  
  FUNCTION PEC_LEP (  LK$TP_E NUMBER,
                      LK$HR_E NUMBER,
                      LK$LEP IN OUT LEP%ROWTYPE,
                      LK$LG1 IN OUT NUMBER,
                      LK$LG2 IN OUT NUMBER,
                      LK$LISTE IN OUT TP$TABLE)
				RETURN NUMBER;
END;

Le problème que je rencontre est que je ne sais pas comment migrer PEC_LEP, pg n'accepte pas [] smallint en in out ...
Y a t'il une alternative ?

Pied de page des forums

Propulsé par FluxBB