Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 07/07/2018 01:19:40
- Sneg
- Membre
erreur sur condition if potsgres 10
Bonjour,
je dois convertir une fonction existante sous oracle vers postgres 10. Le soucis est qu'il me sort une erreur au niveau du IF si quelqu'un a une idée sur le problème parce que la je sèche.
CREATE OR REPLACE FUNCTION test (val IN int, offs IN
int, minVal IN int, maxVal IN int) RETURNS INT AS
$$
DECLARE
Offset int;
newOffset int;
newVal int;
range int;
BEGIN
range:=maxval-minval+1;
newOffset:=(offs/abs(offs))*(abs(offs) % range);
newVal:=val-minVal;
Offset:=newVal+newOffset;
if Offset > range then
Offset:=Offset;
end if;
if Offset<0 then
Offset:=range+offset;
end if;
Offset:=Offset+minVal;
return Offset+minVal;
END;
$$ LANGUAGE plpgsql;
ERROR: syntax error at or near ">"
Hors ligne
#2 07/07/2018 09:03:45
- jmarsac
- Membre
Re : erreur sur condition if potsgres 10
Bonjour,
OFFSET est un mot réservé, vous pouvez renommer la variable en v_offset (par exemple).
Hors ligne
#3 07/07/2018 09:06:07
- rjuju
- Administrateur
Re : erreur sur condition if potsgres 10
Bonjour,
OFFSET est un mot clé réservé. Il faut soit utiliser un autre nom de variable, soit l'entourer de guillemets doubles (et dans ce cas faire attention à la casse dans le nom de la variable, par exemple la casse n'est pas bonne dans l'instruction du 2ème IF).
Julien.
https://rjuju.github.io/
Hors ligne
#4 10/07/2018 21:14:01
- Sneg
- Membre
Re : erreur sur condition if potsgres 10
Bonjour,
super merci ça fonctionne par contre j'ai une erreur lorsque je fais appel a cette fonction dans une autre fonction sur l'encodage, une idée sur cette erreur ?
La base est en UTF8.
fonction decrypt
CREATE FUNCTION decrypt (in s_in varchar, in s_key varchar) RETURNS varchar AS
$$
DECLARE LKEY INT;
LS INT;
I INT;
J INT;
K INT;
OFFS INT;
NEWCODE INT;
RESULTAT VARCHAR;
BEGIN
RESULTAT:='';
LKEY:=LENGTH(S_KEY);
LS:=LENGTH(S_IN);
K:=1;
FOR I IN 1..LS
LOOP
OFFS:=ASCII(SUBSTR(S_KEY,K,1));
NEWCODE:=test(ASCII(SUBSTR(S_IN,I,1)),-OFFS,32,121);
RESULTAT:=RESULTAT||CHR(NEWCODE);
K:=K+1;
IF K>LKEY then
K:=1;
END IF;
END LOOP;
RETURN RESULTAT;
END;
$$
LANGUAGE 'plpgsql'
select decrypt('H(u.()u3-','PREV')
ERROR: requested character too large for encoding: -8
Hors ligne
#5 10/07/2018 21:43:41
- gleu
- Administrateur
Re : erreur sur condition if potsgres 10
J'ai essayé de le rejouer et il m'indique (avec raison) que je n'ai pas la fonction test.
Guillaume.
Hors ligne
#6 10/07/2018 22:57:48
- Sneg
- Membre
Re : erreur sur condition if potsgres 10
Bonjour,
est ce que tu as pris la 1ere fonction du 1er message ?
Cordialement.
Laurent.
Hors ligne
#7 10/07/2018 23:05:20
- Sneg
- Membre
Re : erreur sur condition if potsgres 10
fonction test:
create or replace function test (val in int, offs in int, minVal in int, maxVal in int) returns int as $$
declare
xOffset integer;
newOffset integer;
newVal integer;
range integer;
begin
range=maxval-minval+1;
newOffset=(offs/abs(offs))*(abs(offs) % range);
newVal=val-minVal;
xOffset=newVal+newOffset;
if xOffset > range then
xOffset=xOffset % range;
end if;
if xOffset < 0 then
xOffset=range+xOffset;
end if;
return xOffset+minVal;
end; $$ language plpgsql immutable;
fonction decrypt:
create function decrypt (in s_in varchar, in s_key varchar) returns varchar as $$
declare lkey int;
ls int;
i int;
j int;
k int;
offs int;
newcode int;
resultat varchar;
begin
resultat:='';
lkey:=length(s_key);
ls:=length(s_in);
k:=1;
for i in 1..ls
loop
offs:=ascii(substr(s_key,k,1));
newcode:=test(ascii(substr(s_in,i,1)),-offs,32,121);
resultat:=resultat||chr(newcode);
k:=k+1;
if k>lkey then
k:=1;
end if;
end loop;
return resultat;
end;$$ LANGUAGE 'plpgsql'
Hors ligne
#8 11/07/2018 02:18:47
- Sneg
- Membre
Re : erreur sur condition if potsgres 10
Bonjour,
problème résolu après avoir créé la base sans passer par le template0.
Hors ligne
Pages : 1