Search Postgresql Archives

Plpgsql Multidimensional array

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!

I need to make a plpgsql function and I only think on a multidimensional array to make this function BUT I know that multidimensional arrays are not supported in plpgsql so, I wanna to receive some ideas from this list.

Our system have a proprietary way to make his "ENCODING" , for example, if a product description it's "Paper No. 4" it changes to "Papel N\\012\\015 4" on the database so, changing the "o" for "\\012" and "." for "\\015". Of course that it's not only this substitutions that it makes, it's +/- 80 items.

As I have to access this data externaly (read) and include data directy on the database via another application, I have to make a function that is able to make this conversions on both ways:

DATABASE(ENCODED) => DECODE => DISPLAY
INPUT DATA => CODE => STORE ON THE DATABASE

So, my idea was:
1. Make a plpgsql function with two arguments, varchar (string to code or decode) and a bool argument that will inform if it's to code or decode; 2. Make a multidimensional array with all the relations (code relations Ex.: {'o', '\\015}, {'.', '\\012'} 3. According ti the bool argument make a loop and using the replace function code or decode my string.

It's not possible insert this ENCODINGs on a table because I am not allowed to include tables on this database, I can only use functions!

Something like this:

CREATE OR REPLACE FUNCTION arruma_memo("varchar",bool)
 RETURNS "varchar" AS

$BODY$

DECLARE

old_string ALIAS FOR $1;
tipo_conversao ALIAS FOR $2;
new_string varchar;
varr_tabela varchar[];
vstr_chave varchar(50);

varr_tabela[1] :=$$'[[341','á'$$;
varr_tabela[2] :=$$'[[341','á'$$;
varr_tabela[3] :=$$'[[341','á'$$;

IF tipo_conversao IS TRUE THEN
FOR i IN 1 .. 3
   LOOP
   SELECT varr_tabela[i] INTO vstr_chave;
   new_string := replace(old_string,vstr_chave);
   END LOOP;

ELSE

FOR i IN 1 .. 3
   LOOP
   SELECT varr_tabela[i] INTO vstr_chave;
   new_string := replace(old_string,vstr_chave);
   END LOOP;

END IF;

RETURN new_string;
END;
$BODY$
 LANGUAGE 'plpgsql' VOLATILE;

--

[]'s

Rodrigo Carvalhaes



--
Esta mensagem foi verificada pelo sistema de antivírus e
acredita-se estar livre de perigo.



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux