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 : PL/pgSQL » erreur sur condition if potsgres 10 » 11/07/2018 02:18:47

Bonjour,

problème résolu après avoir créé la base sans passer par le template0.

#2 Re : PL/pgSQL » erreur sur condition if potsgres 10 » 10/07/2018 23:05:20

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'

#3 Re : PL/pgSQL » erreur sur condition if potsgres 10 » 10/07/2018 22:57:48

Bonjour,

est ce que tu as pris la 1ere fonction du 1er message ?

Cordialement.
Laurent.

#4 Re : PL/pgSQL » erreur sur condition if potsgres 10 » 10/07/2018 21:14:01

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

#5 PL/pgSQL » erreur sur condition if potsgres 10 » 07/07/2018 01:19:40

Sneg
Réponses : 7

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 ">"

Pied de page des forums

Propulsé par FluxBB