Bonjour à tous,
Je suis actuellement en train de traduire des procédures stockées faites pour iSeries, pour une base Postgres, et je rencontre quelques soucis qui ne me semblent pas complexes mais je tourne en rond.
Cette procedure me retourne des enregistrements et selon les valeurs passées en paramètres, la requête exécutée est légèrement différente.
Voici le message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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 CREATE FUNCTION P0600 ( IN V0 SMALLINT , IN V1 CHARACTER(5) , IN V2 CHARACTER(5) , IN V3 CHARACTER(8) , IN V4 CHARACTER(8) ) RETURNS SETOF P0600_T AS $$ DECLARE rec P0600_T; I1 VARCHAR(5000); begin I1 = 'MaRequete WHERE Champ1 = ''' || V1 || ''' AND Champ2 = ''' || V2 || ''''; IF v0 = 1 THEN I1 = I1 || ' AND ((Champ3 >= ' || V3 || ' AND Champ4 < ' || V4 || ') )'; ELSE I1 = I1 || 'suite requete'; END IF; FOR rec IN I1 LOOP RETURN NEXT rec ; END LOOP ; RETURN ; END; $$ LANGUAGE 'plpgsql';
Le SQL en lui-même est bon mais je sais que le problème vient de mes déclarations variables, surtout de I1 qui me sert à construire la requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ERROR: syntax error at or near "$1" at character 3 QUERY: $1 CONTEXT: SQL statement in PL/PgSQL function "p0600" near line 18
Je vous remercie pour votre aide et vos éclaircissements.
Partager