Pessoal,

Investi um pouco meu tempo para buscar uma solução legal e cheguei nessa
conclusão:

--- CRIAÇÃO DA TYPE PARA USO DE COLEÇÃO --
CREATE OR REPLACE TYPE t_id IS TABLE OF NUMBER;
/

-- CRIAÇÃO DE FUNCTION PARA TRATAR A LISTA ENVIADA --
CREATE OR REPLACE
FUNCTION fnc_gera_lista(lista       VARCHAR2,
                           delimitador VARCHAR2) RETURN t_id IS
      v_id t_id;
   BEGIN
      SELECT regexp_substr(REPLACE(lista, delimitador, ','),
                           '[^,]+',
                           1,
                           LEVEL) AS lista
      BULK   COLLECT
      INTO   v_id
      FROM   dual
      CONNECT BY regexp_substr(REPLACE(lista, delimitador, ','),
                               '[^,]+',
                               1,
                               LEVEL) IS NOT NULL;
      RETURN v_id;
END;
/

-----------------------
EXEMPLO DE UTILIZAÇÃO:

SELECT *
FROM   TBCARGO C
WHERE  C.CARGOID IN
       (SELECT COLUMN_VALUE AS LISTA
        FROM   TABLE(FNC_GERA_LISTA(';22;19;30;35;40;60;71;92;', ';')));

SELECT COLUMN_VALUE AS LISTA
        FROM   TABLE(FNC_GERA_LISTA(';22;19;30;35;40;60;71;92;', ';'));

Fica a dica aí...

Att,
Emerson S. Gaudêncio

Em 19 de agosto de 2015 09:26, Eduardo Perdomo panc...@gmail.com
[oracle_br] <oracle_br@yahoogrupos.com.br> escreveu:

>
>
> A aplicação tem que tratar isso e montar o SQL de acordo. Valores string
> com aspas e separados com virgulas. Valores numéricos sem aspas e TB
> separados por virgula.
> Em 19/08/2015 09:54, "Paulo emlis...@emanager.com.br [oracle_br]" <
> oracle_br@yahoogrupos.com.br> escreveu:
>
>>
>>
>> Bom dia.
>>
>> Isso ai, era assim mesmo que usava, mas como eu disse, já faz um certo
>> tempo(ou muito tempo) que usei,
>> e com certeza não me lembrava mais como era. É realmente não é muito
>> "bonito" mas na época resolveu.
>>
>> Abraço Andre.
>>
>> Att,
>>
>> Paulo
>>
>>
>>
>>
>>
>> Em 18/08/2015 16:47, Andre Santos andre.psantos...@gmail.com [oracle_br]
>> escreveu:
>>
>>
>> Paulo
>>
>> Isso que você comentou, é bem provável que tenha sido feito com LIKE (ao
>> invés do operador IN).
>> Partindo do seu exemplo: ... codfornec in ('#22#19#30#35#40#')
>> Seria algo +/- assim: ... '#22#19#30#35#40#' LIKE '%#' || codfornec ||
>> '#%'
>>
>> Mas pagaria um preço em performance e escalabilidade... talvez ficando
>> inviável, dependendo do contexto.
>>
>> [ ]'s
>>
>> André
>>
>>
>> Em 18 de agosto de 2015 15:11, jlchia...@yahoo.com.br [oracle_br] <
>> <oracle_br@yahoogrupos.com.br>oracle_br@yahoogrupos.com.br> escreveu:
>>
>>>
>>>
>>> Paulo, essa sintaxe de valores separados por # ** COM CERTEZA ** não é
>>> aceita pelo RDBMS Oracle, que é o tópico-fim aqui do grupo - isso parece
>>> coisa de postgre... afaik no RDBMS Oracle é mesmo OU se ter os valores numa
>>> tabela e usar sub-query OU se escrever uma proc que "abra" os valores
>>> dentro da string, cfrme mostrei em msg anterior...
>>>
>>>  []s
>>>
>>>     Chiappa
>>>
>>>  OBS : me recuso a usar porquices tipo montar um SQL dinâmico com os
>>> valores extraídos da string separada por vírgula, então nem comento essa
>>> possibilidade...
>>>
>>
>>
>> 
>
  • [or... peu_cab...@yahoo.com.br [oracle_br]
    • ... jlchia...@yahoo.com.br [oracle_br]
    • ... Paulo emlis...@emanager.com.br [oracle_br]
      • ... jlchia...@yahoo.com.br [oracle_br]
        • ... Andre Santos andre.psantos...@gmail.com [oracle_br]
          • ... Sérgio Luiz Rodrigues Chaves sergio.cha...@elumini.com.br [oracle_br]
            • ... jlchia...@yahoo.com.br [oracle_br]
          • ... Paulo emlis...@emanager.com.br [oracle_br]
            • ... Eduardo Perdomo panc...@gmail.com [oracle_br]
              • ... Emerson dos Santos Gaudêncio emerson.fen...@gmail.com [oracle_br]
                • ... Pericles Cabral peucab...@gmail.com [oracle_br]

Responder a