Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR ALTER PROCEDURE get_parametros (
- lista_params VARCHAR (2048))
- returns (
- param_string VARCHAR (255),
- param_type VARCHAR (1))
- AS
- DECLARE variable nfound INTEGER = 0;
- DECLARE variable strtexto VARCHAR (2048) = ''; -- Tamanho máximo que a variavel lista_param pode ter
- DECLARE variable strparam VARCHAR (255) = ''; -- Tamanho máximo que um parametro string pode ter
- BEGIN
- -- Esta função pega uma string com conteudo separado por virgula e retorna uma
- -- linha por item além do seu tipo S(String), I(Integer) ou (F)loat
- -- Ex: select * from get_parametros('1,2,teste,1.20'); retorna:
- -- +-PARAM_STRING-+-PARAM_TYPE-+
- -- |1 | I |
- -- |2 | I |
- -- |teste | S |
- -- |1.20 | F |
- -- +--------------+------------+
- lista_params=TRIM(lista_params);
- IF (lista_params='') THEN EXIT;
- StrTexto=:lista_params;
- -- a string precisa estar finalizada com virgula
- IF (right(:StrTexto,1)<>',') THEN StrTexto=:StrTexto||',';
- nFound = position (',', :StrTexto);
- WHILE (:nFound > 0) DO
- BEGIN
- StrParam = substring (:StrTexto FROM 1 FOR :nFound);
- IF (TRIM(StrParam)<>'') THEN
- BEGIN
- param_string=TRIM(substring (:StrTexto FROM 1 FOR (:nFound-1)));
- param_type='S';
- IF (:param_string SIMILAR TO '[0-9]+') THEN param_type='I';
- IF (:param_string SIMILAR TO '[0-9]+.[0-9]+') THEN param_type='F';
- suspend;
- END
- StrTexto = (Substring(:StrTexto FROM (:nFound+1) FOR (CHAR_LENGTH(:StrTexto))));
- nFound = position (',', :StrTexto);
- END
- -- Não deveria sobrar nada de StrTexto, mas se isso acontecer algum dia é porque
- -- deixei passar alguma coisa então retorno essa porção como (U)nknown, isto é, desconhecido.
- StrTexto=TRIM(:StrTexto);
- IF (StrTexto<>'') THEN
- BEGIN
- param_string=StrTexto;
- param_type='U';
- suspend;
- END
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement