Re: [oracle_br] Condição dentro de variável

2009-05-13 Por tôpico Gleyson Melo
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

2009-05-13 Por tôpico jlchiappa
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

2009-05-13 Por tôpico Júlio César Corrêa
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

2009-05-13 Por tôpico Jairo Azevedo
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

2009-05-13 Por tôpico 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...@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

2009-05-13 Por tôpico 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...@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

2009-05-13 Por tôpico Willian Fernando Frasson
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

2009-05-13 Por tôpico 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