Vous n'êtes pas identifié(e).
Pages : 1
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
Bonjour,
OFFSET est un mot réservé, vous pouvez renommer la variable en v_offset (par exemple).
Hors ligne
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
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
J'ai essayé de le rejouer et il m'indique (avec raison) que je n'ai pas la fonction test.
Guillaume.
Hors ligne
Bonjour,
est ce que tu as pris la 1ere fonction du 1er message ?
Cordialement.
Laurent.
Hors ligne
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
Bonjour,
problème résolu après avoir créé la base sans passer par le template0.
Hors ligne
Pages : 1