Mestre Chiappa Conheço essas threads do AskTom. Porém, como têm muitos "artifícios técnicos", podem enrolar (ou assustar) quem está iniciando.
Eu não chegaria a ser tão radical a ponto de dizer "nunca usaria"... (mas claro que respeito sua opinião). No caso específico, caso usasse SQL dinâmico, o mais importante seria "validar" a string de parâmetro (com a lista). O essencial é saber dos riscos... e foi isso que quis enfatizar. ;) Ah! A a solução de tabela temporária, se for viável no contexto dele, seria melhor mesmo (e simples). [ ] André Em 2 de setembro de 2010 22:19, José Laurindo <jlchia...@yahoo.com.br>escreveu: > > > > http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:210612357425e > http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:110612348061#3653068157543são > duas threads Clássicas sobre o assunto, onde são debatidas as muitas > técnicas possívels, mas ** DE FORMA ALGUMA ** eu uso 'SQL dinâmico' e > 'fácil' na mesma frase, a não ser para dizer o quanto são conceitos > incompatíveis... Sim, além da segurança também a performance pode ser > Seriamente afetada por SQL dinâmico, muitas vezes ele é um pé pra se > debugar, eu FUJO desse cara o quanto der.... > No caso em questão , imho o Realmente Fácil é vc ter uma tabela temporária > (uma Global temporary Table, talvez) com uma coluna (numerica, já que são > números) onde vc enfia os parâmetros , aí o SQL passou a ser fixo : > > SELECT nnn FROM tabela > WHERE coluna in (select colunacomoparametro FROM tabelatemp); > > pronto, mais fácil que isso não tem... > > []s > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>, > Andre Santos <andre.psantos...@...> escreveu > > > > > Gustavo > > > > A maneira mais fácil é através de SQL dinâmico. Ou seja, todo o comando > será > > uma string a ser interpretada em tempo de execução. > > Procure pelo comando "execute immediate". > > > > Dentro da procedure ficaria +/- assim: > > execute immediate "select blá, blá, blá from sua_tabela where campo in (" > > || p_lista || ")"; > > > > OBS.: O maior problema é que isso não fica muito seguro. Podem ocorrer > erro > > em tempo de execução ou, pior, um ataque por "SQL injection". Para evitar > > esses problemas seria importante fazer uma **validação** desse parâmetro > > (para conferir se não está fora do padrão esperado). > > > > [ ] > > > > André > > > > > > Em 2 de setembro de 2010 15:31, Gustavo Queiroz > > <gustavo...@...>escreveu: > > > > > > > > > > > > Pessoal, > > > > > > Tenho uma procedure que deverá possuir um parametro que é uma lista de > > > números, por exemplo: 1, 2, 3, 4. Essa lista deverá ser usada em uma > > > consulta da procedure na clausula Where onde um determinado campo > deverá ter > > > um desses valores, utilando o "IN". Essa quantidade de números da lista > pode > > > ser variável, não tendo uma quantidade fixa ou padrão. > > > > > > Como posso fazer para ter que passar esse valor para procedure? Tentei > > > passar como string e depois jogar direto, mas não entende como número. > > > > > > Obgrigado, > > > > > > Gustavo > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > [As partes desta mensagem que não continham texto foram removidas] ------------------------------------ -------------------------------------------------------------------------------------------------------------------------- >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -------------------------------------------------------------------------------------------------------------------------- >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >http://www.oraclebr.com.br/ ------------------------------------------------------------------------------------------------------------------------ Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html