Ir para o conteúdo principal

Procedure - Retorna lista

SQL: 

create or alter procedure retorna_lista (texto blob, delimitador varchar(20)) returns (lista varchar(4000)) as
  declare variable posicao integer = 1;
  declare variable prox_pos integer;
  declare variable tamanho integer;
begin
  tamanho = char_length(:texto);

  while (posicao <= tamanho) do
  begin
    prox_pos = position(delimitador, :texto, :posicao);

    if (:prox_pos = 0) then
      prox_pos = tamanho+1;

    lista = trim(substring(:texto from :posicao for (:prox_pos - :posicao)));

    suspend;

    posicao = prox_pos+1;
  end
end

Chamada da procedure: 

SELECT * 
  FROM retorna_lista('1,2,3', ',')

Retorno: 

| LISTA |
---------
| 1     |
| 2     |
| 3     |