Re: [oracle_br] Condição dentro de variável
Olá Rogério, Um exemplo de função de validação poderia ser essa: function valida_expr(expr in varchar2) return boolean is begin execute immediate 'SELECT COUNT(0) FROM DUAL WHERE ' || EXPR INTO CONT; return cont = 1; exception when others then return false; end; Olha um exemplo de uso abaixo: SQL> declare 2 3 cont number; 4 5 function valida_expr(expr in varchar2) return boolean is 6 begin 7 8 execute immediate 'SELECT COUNT(0) FROM DUAL WHERE ' || EXPR INTO CONT; 9 10 return cont = 1; 11 exception when others then 12 return false; 13 end; 14 15 begin 16 17 -- CASO SIMPLES 18 IF VALIDA_EXPR('1=1') THEN 19 DBMS_OUTPUT.PUT_LINE('1 REALMENTE E IGUAL A 1 (OMG!)'); 20 ELSE 21 DBMS_OUTPUT.PUT_LINE('EU SABIA QUE ERA DIFERENTE!!'); 22 END IF; 23 24 -- CASO ERRADO 25 IF VALIDA_EXPR('1=x') THEN 26 DBMS_OUTPUT.PUT_LINE('1=x'); 27 ELSE 28 DBMS_OUTPUT.PUT_LINE('Nao passou'); 29 END IF; 30 31 -- CASO COMPLEXO 32 IF VALIDA_EXPR('(5 = SQRT(25) AND 1 <> 0) OR (1 * 10 = 1000 / 100)') THEN 33 DBMS_OUTPUT.PUT_LINE('Deu tudo certo!'); 34 ELSE 35 DBMS_OUTPUT.PUT_LINE('Que merda foi essa?'); 36 END IF; 37 38 end; 39 / 1 REALMENTE E IGUAL A 1 (OMG!) Nao passou Deu tudo certo! Procedimento PL/SQL concluÝdo com sucesso. SQL> O pessoal não tá preocupado com performance em vão. Você mencionou pouca informação sobre a sua aplicação. Como ela vai se comportar? Milhares de usuários executando milhões de validações por dia? Uma vez por semana? A validação vai mudar constantemente ou é uma coisa que vai permanecer a mesma por milhares de anos? Se você não tomar cuidado, pode impactar pesadamente a Shared Pool, talvez a CPU da sua máquina e a vida de usuários inocentes que não têm nada a ver com a história. Abração. 2009/5/12 RogérioLo Bello > > > Bom dia, > > Estou com um problema, sei que em algumas linguagens tem como fazer essa > conversão, mas não sei quanto a PL/SQL. > > Quero fazer o seguinte, colocar uma condição dentro da variável e testar a > variável: > > V_CAST := '1=1'; > > IF V_CAST THEN > V_RETORNO := '1 é igual a 1'; > END IF; > > Existe alguma forma de fazer isso? > > Rogério > > > -- Atenciosamente, Gleyson Melo Oracle Database 10g Administrator Certified Professional [As partes desta mensagem que não continham texto foram removidas]
Re: RES: [oracle_br] Condição dentro de variável
Sem dúvida, e geralmente é essa a recomendação, MAS o colega lá queria ter uma ** STRING **, dinâmica, a ser comparada, aí não tem jeito, ele VAI ter que usar SQL dinâmico de algum tipo... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Jairo Azevedo escreveu > > Se fosse utilizado um Case ou um Decode, não seria mais prático? > ex. > > bResult := Case When 1=1 Then 1 Else 0 End > > 2009/5/13 jlchiappa > > > > > > > PMFJI, mas colega, pode checar nos manuais de PL/SQL que vc ** não ** vai > > achar nada pronto nesse sentido, afaik... Isso vai demandar SQL dinâmico, e > > portanto vc ** VAI** pagar o preço em performnace cobrado pelo SQL dinâmico, > > principalmente pelo parse a cada execução SE realmente, totalmente, > > isso TEM que ser feito assim, vc vai escrever uma rotina VALIDA_EXPRESSAO > > que recebe como argumento a string com a expressão, a tenta executar > > dinamicamente e retorna um boolean refletindo sucesso ou não, o seu programa > > ficaria tipo : > > > > DECLARE > > V_CAST varchar2(1000) := '1=1'; > > BEGIN > > IF VALIDA_EXPRESSAO(V_CAST) THEN > > V_RETORNO := '1 é igual a 1'; > > END IF; > > ... > > > > pesquise por EXECUTE IMEMDIATE, por REF CURSOR e por DBMS_SQL (são as > > opções de SQL dinâmico em PL/SQL) que vc acha refs, mas torno a dizer, não é > > o mais recomendado para performance... > > > > []s > > > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br , > > RogérioLo Bello escreveu > > > > > > > > Então Willian, > > > > > > > > > > > > Virá de uma tabela, mas o que eu queria saber é como fazer funcionar. > > > > > > > > > > > > Como eu faço o IF entender a condição dentro da variável? > > > > > > > > > > > > Rogério > > > > > > > > > > > > De: oracle_br@yahoogrupos.com.br [mailto: > > oracle_br@yahoogrupos.com.br ] Em > > > nome de Willian Fernando Frasson > > > Enviada em: quarta-feira, 13 de maio de 2009 10:59 > > > Para: oracle_br@yahoogrupos.com.br > > > Assunto: Re: [oracle_br] Condição dentro de variável > > > > > > > > > > > > > > > > > > > > > > > > > > > Rogério são muitas comparações? > > > > > > Se forem talvez uma tabela temporária com a condição seria legal: > > > Ex: > > > TBCONDICAO > > > > > > TABELA CONDICAO > > > > > > CLIENTE >=1 > > > FORNECEDOR <=1 > > > FUNCIONARIO =5 > > > > > > - Original Message - > > > From: RogérioLo Bello > > > To: oracle_br@yahoogrupos.com.br > oracle_br%40yahoogrupos.com.br > > > > Sent: Tuesday, May 12, 2009 10:46 AM > > > Subject: [oracle_br] Condição dentro de variável > > > > > > Bom dia, > > > > > > Estou com um problema, sei que em algumas linguagens tem como fazer essa > > > conversão, mas não sei quanto a PL/SQL. > > > > > > Quero fazer o seguinte, colocar uma condição dentro da variável e testar > > a > > > variável: > > > > > > V_CAST := '1=1'; > > > > > > IF V_CAST THEN > > > V_RETORNO := '1 é igual a 1'; > > > END IF; > > > > > > Existe alguma forma de fazer isso? > > > > > > Rogério > > > > > > -- > > > > > > O Banco de Dados de Vírus interno expirou. > > > Verificado por AVG - http://www.avgbrasil.com.br > > > Versão: 8.0.233 / Banco de dados de vírus: 270.10.16/1926 - Data de > > > Lançamento: 30/1/2009 17:31 > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > -- > Jairo Azevedo > jsouza...@... > protheus...@... > (21) -6492 > > > [As partes desta mensagem que não continham texto foram removidas] >
Re: [oracle_br] Condição dentro de variável
Fala! Poderia dizer para que você quer usar isso? Testou? Nunca tentei,mas creio que não funciona. Abs, 2009/5/12 RogérioLo Bello > > > Então Willian, > > Virá de uma tabela, mas o que eu queria saber é como fazer funcionar. > > Como eu faço o IF entender a condição dentro da variável? > > Rogério > > De: oracle_br@yahoogrupos.com.br [mailto: > oracle_br@yahoogrupos.com.br ] Em > nome de Willian Fernando Frasson > Enviada em: quarta-feira, 13 de maio de 2009 10:59 > Para: oracle_br@yahoogrupos.com.br > Assunto: Re: [oracle_br] Condição dentro de variável > > > Rogério são muitas comparações? > > Se forem talvez uma tabela temporária com a condição seria legal: > Ex: > TBCONDICAO > > TABELA CONDICAO > > CLIENTE >=1 > FORNECEDOR <=1 > FUNCIONARIO =5 > > - Original Message - > From: RogérioLo Bello > To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br > > Sent: Tuesday, May 12, 2009 10:46 AM > Subject: [oracle_br] Condição dentro de variável > > Bom dia, > > Estou com um problema, sei que em algumas linguagens tem como fazer essa > conversão, mas não sei quanto a PL/SQL. > > Quero fazer o seguinte, colocar uma condição dentro da variável e testar a > variável: > > V_CAST := '1=1'; > > IF V_CAST THEN > V_RETORNO := '1 é igual a 1'; > END IF; > > Existe alguma forma de fazer isso? > > Rogério > > -- > > O Banco de Dados de Vírus interno expirou. > Verificado por AVG - http://www.avgbrasil.com.br > Versão: 8.0.233 / Banco de dados de vírus: 270.10.16/1926 - Data de > Lançamento: 30/1/2009 17:31 > > [As partes desta mensagem que não continham texto foram removidas] > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Júlio César Corrêa IS Technologist - Oracle DBA www.dbajccorrea.com To stay competitive in the tech industry, never stop learning. Always be on the lookout for better ways of doing things and new technologies. Our industry does not reward people who let themselves stagnate John Hall, Senior Vice President, Oracle University [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
Re: RES: [oracle_br] Condição dentro de variável
Se fosse utilizado um Case ou um Decode, não seria mais prático? ex. bResult := Case When 1=1 Then 1 Else 0 End 2009/5/13 jlchiappa > > > PMFJI, mas colega, pode checar nos manuais de PL/SQL que vc ** não ** vai > achar nada pronto nesse sentido, afaik... Isso vai demandar SQL dinâmico, e > portanto vc ** VAI** pagar o preço em performnace cobrado pelo SQL dinâmico, > principalmente pelo parse a cada execução SE realmente, totalmente, > isso TEM que ser feito assim, vc vai escrever uma rotina VALIDA_EXPRESSAO > que recebe como argumento a string com a expressão, a tenta executar > dinamicamente e retorna um boolean refletindo sucesso ou não, o seu programa > ficaria tipo : > > DECLARE > V_CAST varchar2(1000) := '1=1'; > BEGIN > IF VALIDA_EXPRESSAO(V_CAST) THEN > V_RETORNO := '1 é igual a 1'; > END IF; > ... > > pesquise por EXECUTE IMEMDIATE, por REF CURSOR e por DBMS_SQL (são as > opções de SQL dinâmico em PL/SQL) que vc acha refs, mas torno a dizer, não é > o mais recomendado para performance... > > []s > > Chiappa > --- Em oracle_br@yahoogrupos.com.br , > RogérioLo Bello escreveu > > > > > Então Willian, > > > > > > > > Virá de uma tabela, mas o que eu queria saber é como fazer funcionar. > > > > > > > > Como eu faço o IF entender a condição dentro da variável? > > > > > > > > Rogério > > > > > > > > De: oracle_br@yahoogrupos.com.br [mailto: > oracle_br@yahoogrupos.com.br ] Em > > nome de Willian Fernando Frasson > > Enviada em: quarta-feira, 13 de maio de 2009 10:59 > > Para: oracle_br@yahoogrupos.com.br > > Assunto: Re: [oracle_br] Condição dentro de variável > > > > > > > > > > > > > > > > > > Rogério são muitas comparações? > > > > Se forem talvez uma tabela temporária com a condição seria legal: > > Ex: > > TBCONDICAO > > > > TABELA CONDICAO > > > > CLIENTE >=1 > > FORNECEDOR <=1 > > FUNCIONARIO =5 > > > > - Original Message - > > From: RogérioLo Bello > > To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br > > > Sent: Tuesday, May 12, 2009 10:46 AM > > Subject: [oracle_br] Condição dentro de variável > > > > Bom dia, > > > > Estou com um problema, sei que em algumas linguagens tem como fazer essa > > conversão, mas não sei quanto a PL/SQL. > > > > Quero fazer o seguinte, colocar uma condição dentro da variável e testar > a > > variável: > > > > V_CAST := '1=1'; > > > > IF V_CAST THEN > > V_RETORNO := '1 é igual a 1'; > > END IF; > > > > Existe alguma forma de fazer isso? > > > > Rogério > > > > -- > > > > O Banco de Dados de Vírus interno expirou. > > Verificado por AVG - http://www.avgbrasil.com.br > > Versão: 8.0.233 / Banco de dados de vírus: 270.10.16/1926 - Data de > > Lançamento: 30/1/2009 17:31 > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > -- Jairo Azevedo jsouza...@gmail.com protheus...@yahoo.com.br (21) -6492 [As partes desta mensagem que não continham texto foram removidas]
Re: RES: [oracle_br] Condição dentro de variável
PMFJI, mas colega, pode checar nos manuais de PL/SQL que vc ** não ** vai achar nada pronto nesse sentido, afaik... Isso vai demandar SQL dinâmico, e portanto vc ** VAI** pagar o preço em performnace cobrado pelo SQL dinâmico, principalmente pelo parse a cada execução SE realmente, totalmente, isso TEM que ser feito assim, vc vai escrever uma rotina VALIDA_EXPRESSAO que recebe como argumento a string com a expressão, a tenta executar dinamicamente e retorna um boolean refletindo sucesso ou não, o seu programa ficaria tipo : DECLARE V_CAST varchar2(1000) := '1=1'; BEGIN IF VALIDA_EXPRESSAO(V_CAST) THEN V_RETORNO := '1 é igual a 1'; END IF; ... pesquise por EXECUTE IMEMDIATE, por REF CURSOR e por DBMS_SQL (são as opções de SQL dinâmico em PL/SQL) que vc acha refs, mas torno a dizer, não é o mais recomendado para performance... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, RogérioLo Bello escreveu > > Então Willian, > > > > Virá de uma tabela, mas o que eu queria saber é como fazer funcionar. > > > > Como eu faço o IF entender a condição dentro da variável? > > > > Rogério > > > > De: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] Em > nome de Willian Fernando Frasson > Enviada em: quarta-feira, 13 de maio de 2009 10:59 > Para: oracle_br@yahoogrupos.com.br > Assunto: Re: [oracle_br] Condição dentro de variável > > > > > > > > > Rogério são muitas comparações? > > Se forem talvez uma tabela temporária com a condição seria legal: > Ex: > TBCONDICAO > > TABELA CONDICAO > > CLIENTE >=1 > FORNECEDOR <=1 > FUNCIONARIO =5 > > - Original Message - > From: RogérioLo Bello > To: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > Sent: Tuesday, May 12, 2009 10:46 AM > Subject: [oracle_br] Condição dentro de variável > > Bom dia, > > Estou com um problema, sei que em algumas linguagens tem como fazer essa > conversão, mas não sei quanto a PL/SQL. > > Quero fazer o seguinte, colocar uma condição dentro da variável e testar a > variável: > > V_CAST := '1=1'; > > IF V_CAST THEN > V_RETORNO := '1 é igual a 1'; > END IF; > > Existe alguma forma de fazer isso? > > Rogério > > -- > > O Banco de Dados de Vírus interno expirou. > Verificado por AVG - http://www.avgbrasil.com.br > Versão: 8.0.233 / Banco de dados de vírus: 270.10.16/1926 - Data de > Lançamento: 30/1/2009 17:31 > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > [As partes desta mensagem que não continham texto foram removidas] >
RES: [oracle_br] Condição dentro de variável
Então Willian, Virá de uma tabela, mas o que eu queria saber é como fazer funcionar. Como eu faço o IF entender a condição dentro da variável? Rogério De: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] Em nome de Willian Fernando Frasson Enviada em: quarta-feira, 13 de maio de 2009 10:59 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] Condição dentro de variável Rogério são muitas comparações? Se forem talvez uma tabela temporária com a condição seria legal: Ex: TBCONDICAO TABELA CONDICAO CLIENTE >=1 FORNECEDOR <=1 FUNCIONARIO =5 - Original Message - From: RogérioLo Bello To: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> Sent: Tuesday, May 12, 2009 10:46 AM Subject: [oracle_br] Condição dentro de variável Bom dia, Estou com um problema, sei que em algumas linguagens tem como fazer essa conversão, mas não sei quanto a PL/SQL. Quero fazer o seguinte, colocar uma condição dentro da variável e testar a variável: V_CAST := '1=1'; IF V_CAST THEN V_RETORNO := '1 é igual a 1'; END IF; Existe alguma forma de fazer isso? Rogério -- O Banco de Dados de Vírus interno expirou. Verificado por AVG - http://www.avgbrasil.com.br Versão: 8.0.233 / Banco de dados de vírus: 270.10.16/1926 - Data de Lançamento: 30/1/2009 17:31 [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Condição dentro de variável
Rogério são muitas comparações? Se forem talvez uma tabela temporária com a condição seria legal: Ex: TBCONDICAO TABELACONDICAO CLIENTE>=1 FORNECEDOR <=1 FUNCIONARIO=5 - Original Message - From: RogérioLo Bello To: oracle_br@yahoogrupos.com.br Sent: Tuesday, May 12, 2009 10:46 AM Subject: [oracle_br] Condição dentro de variável Bom dia, Estou com um problema, sei que em algumas linguagens tem como fazer essa conversão, mas não sei quanto a PL/SQL. Quero fazer o seguinte, colocar uma condição dentro da variável e testar a variável: V_CAST := '1=1'; IF V_CAST THEN V_RETORNO := '1 é igual a 1'; END IF; Existe alguma forma de fazer isso? Rogério -- O Banco de Dados de Vírus interno expirou. Verificado por AVG - http://www.avgbrasil.com.br Versão: 8.0.233 / Banco de dados de vírus: 270.10.16/1926 - Data de Lançamento: 30/1/2009 17:31 [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Condição dentro de variável
Bom dia, Estou com um problema, sei que em algumas linguagens tem como fazer essa conversão, mas não sei quanto a PL/SQL. Quero fazer o seguinte, colocar uma condição dentro da variável e testar a variável: V_CAST := '1=1'; IF V_CAST THEN V_RETORNO := '1 é igual a 1'; END IF; Existe alguma forma de fazer isso? Rogério