Advertisement
hamacker

Gerenciamento de parametros através de procedure

Feb 1st, 2016
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.91 KB | None | 0 0
  1. CREATE OR ALTER PROCEDURE get_parametros (
  2.     lista_params VARCHAR (2048))
  3. returns (
  4.     param_string VARCHAR (255),
  5.     param_type VARCHAR (1))
  6. AS
  7. DECLARE variable nfound INTEGER = 0;
  8. DECLARE variable strtexto VARCHAR (2048) = ''; -- Tamanho máximo que a variavel lista_param pode ter
  9. DECLARE variable strparam VARCHAR (255) = '';  -- Tamanho máximo que um parametro string pode ter
  10. BEGIN
  11.   -- Esta função pega uma string com conteudo separado por virgula e retorna uma
  12.   -- linha por item além do seu tipo S(String), I(Integer) ou (F)loat
  13.   -- Ex: select * from get_parametros('1,2,teste,1.20'); retorna:
  14.   -- +-PARAM_STRING-+-PARAM_TYPE-+
  15.   -- |1             | I          |
  16.   -- |2             | I          |
  17.   -- |teste         | S          |
  18.   -- |1.20          | F          |
  19.   -- +--------------+------------+
  20.  
  21.   lista_params=TRIM(lista_params);
  22.   IF (lista_params='') THEN EXIT;
  23.   StrTexto=:lista_params;
  24.   -- a string precisa estar finalizada com virgula
  25.   IF (right(:StrTexto,1)<>',') THEN StrTexto=:StrTexto||',';
  26.   nFound = position (',', :StrTexto);
  27.   WHILE (:nFound > 0) DO
  28.   BEGIN
  29.     StrParam = substring (:StrTexto FROM 1 FOR :nFound);
  30.     IF (TRIM(StrParam)<>'') THEN
  31.     BEGIN
  32.       param_string=TRIM(substring (:StrTexto FROM 1 FOR (:nFound-1)));
  33.       param_type='S';
  34.       IF (:param_string SIMILAR TO '[0-9]+') THEN param_type='I';
  35.       IF (:param_string SIMILAR TO '[0-9]+.[0-9]+') THEN param_type='F';
  36.       suspend;
  37.     END
  38.     StrTexto = (Substring(:StrTexto FROM (:nFound+1) FOR (CHAR_LENGTH(:StrTexto))));
  39.     nFound = position (',', :StrTexto);
  40.   END
  41.   -- Não deveria sobrar nada de StrTexto, mas se isso acontecer algum dia é porque
  42.   -- deixei passar alguma coisa então retorno essa porção como (U)nknown, isto é, desconhecido.
  43.   StrTexto=TRIM(:StrTexto);
  44.   IF (StrTexto<>'') THEN
  45.   BEGIN
  46.     param_string=StrTexto;
  47.     param_type='U';
  48.     suspend;
  49.   END
  50.  
  51. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement