É : faz todo o sentido ele (o otimizador) não mexer no que está 
dentro de /* .. */, pois isso PODERIA ser uma hint, que logicamente 
teria que ser levado em consideração. Já um comentário-comentário 
MESMO, que não usa essa sintaxe, que o timizador SEGURAMENTE consegue 
identificar que aquilo SÓ PODE mesmo ser comentário, aí sim o stored 
PL/SQL stripa, cfrme 9executando no sqlplus o cara abaixo) :


drop table t;
create table t ( x int );
insert into t values ( 1 );
insert into t values ( 2 );
create or replace
procedure p is
begin
for i in 1 .. 10
loop
delete from t where x = i; -- deletando 1a vez
delete from t where x = i; -- deletando 2a vez
end loop;
end;
/
alter session set sql_trace=true;
exec p;
exit

==> obtenho no tkprof :

TKPROF: Release 9.2.0.5.0 - Production on Qui Dez 29 15:54:29 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
.....
**********************************************************************
**********

BEGIN p; END;


call     count       cpu    elapsed       disk      query    
current        rows
------- ------  -------- ---------- ---------- ---------- ----------
  ----------
Parse        1      0.00       0.00          0          0          
0           0
Execute      1      0.00       0.00          0          0          
0           1
Fetch        0      0.00       0.00          0          0          
0           0
------- ------  -------- ---------- ---------- ---------- ----------
  ----------
total        2      0.00       0.00          0          0          
0           1

Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 69
**********************************************************************
**********

DELETE FROM T
WHERE
 X = :B1

==>> o coment foi stripado, portanto o texto ficou o mesmo....

call     count       cpu    elapsed       disk      query    
current        rows
------- ------  -------- ---------- ---------- ---------- ----------
  ----------
Parse        2      0.00       0.00          0          0          
0           0
Execute     20      0.00       0.00          0         60          
3           2
Fetch        0      0.00       0.00          0          0          
0           0
------- ------  -------- ---------- ---------- ---------- ----------
  ----------
total       22      0.00       0.00          0         60          
3           2

==> então é mesmo usar SEMPRE coments externos ao seu SQL dentro de 
procedures : na minha apresentação da ENPO, quando recomendei usar-se 
stored PL/SQL, justamente a remoção de espaços em branco e coments 
foi citada como uma das vantagens de stored proc, para se ter mais 
chances de se obter textos iguais e evitar hard PARSEs extras.

[]s

 Chiappa
 
--- Em oracle_br@yahoogrupos.com.br, "Marcio Portes" 
<[EMAIL PROTECTED]> escreveu
>
> Testado na versão 9i. Sim ele vai gerar entradas distintas.
> Fiz o seguinte.
> 
> drop table t;
> create table t ( x int );
> insert into t values ( 1 );
> insert into t values ( 2 );
> 
> create or replace 
> procedure p is
> begin
>         for i in 1 .. 10
>         loop
>                 delete /* 1 */ from t where x = i;
>                 delete /* 2 */ from t where x = i;
>         end loop;
> end;
> /
> 
> alter session set sql_trace=true;
> exec p;
> exit
> 
> Depois vi no tkprof.
> 
> DELETE /* 1 */ from t 
> where
>  x = :b1
> 
> 
> call     count       cpu    elapsed       disk      query    
> current        rows
> ------- ------  -------- ---------- ---------- ---------- ----------
>   ----------
> Parse        1      0.00       0.00          0          0          
> 0           0
> Execute     10      0.00       0.00          0         30          
> 3           2
> Fetch        0      0.00       0.00          0          0          
> 0           0
> ------- ------  -------- ---------- ---------- ---------- ----------
>   ----------
> total       11      0.00       0.00          0         30          
> 3           2
> 
> Misses in library cache during parse: 1
> Optimizer goal: CHOOSE
> Parsing user id: 102     (recursive depth: 1)
> 
> Rows     Row Source Operation
> -------  ---------------------------------------------------
>       0  DELETE  (cr=30 r=0 w=0 time=945 us)
>       2   TABLE ACCESS FULL T (cr=30 r=0 w=0 time=396 us)
> 
> 
**********************************************************************
> **********
> 
> DELETE /* 2 */ from t 
> where
>  x = :b1
> 
> 
> call     count       cpu    elapsed       disk      query    
> current        rows
> ------- ------  -------- ---------- ---------- ---------- ----------
>   ----------
> Parse        1      0.00       0.00          0          0          
> 0           0
> Execute     10      0.00       0.00          0         30          
> 0           0
> Fetch        0      0.00       0.00          0          0          
> 0           0
> ------- ------  -------- ---------- ---------- ---------- ----------
>   ----------
> total       11      0.00       0.00          0         30          
> 0           0
> 
> Misses in library cache during parse: 1
> Optimizer goal: CHOOSE
> Parsing user id: 102     (recursive depth: 1)
> 
> Rows     Row Source Operation
> -------  ---------------------------------------------------
>       0  DELETE  (cr=30 r=0 w=0 time=328 us)
>       0   TABLE ACCESS FULL T (cr=30 r=0 w=0 time=310 us)
> 
> Cada um deles foi parseado uma vez e executado 10. Diferentemente 
> quando retirei os comentários e mantive as duas chamadas o tkprof 
me 
> mostrou 2 parses (1 hard e outro soft) e 20 execuções para a MESMA 
> ENTRADA.
> 
> DELETE from t
> where
>  x = :b1
> 
> 
> call     count       cpu    elapsed       disk      query    
> current        rows
> ------- ------  -------- ---------- ---------- ---------- ----------
>   ----------
> Parse        2      0.00       0.00          0          0          
> 0           0
> Execute     20      0.00       0.01          0         60          
> 3           2
> Fetch        0      0.00       0.00          0          0          
> 0           0
> ------- ------  -------- ---------- ---------- ---------- ----------
>   ----------
> total       22      0.00       0.01          0         60          
> 3           2
> 
> Misses in library cache during parse: 1
> Optimizer goal: CHOOSE
> Parsing user id: 102     (recursive depth: 1)
> 
> Rows     Row Source Operation
> -------  ---------------------------------------------------
>       0  DELETE  (cr=30 r=0 w=0 time=5612 us)
>       2   TABLE ACCESS FULL T (cr=30 r=0 w=0 time=387 us)
> 
> 
> script usado.
> 
> drop table t;
> create table t ( x int );
> insert into t values ( 1 );
> insert into t values ( 2 );
> 
> create or replace 
> procedure p is
> begin
>         for i in 1 .. 10
>         loop
>                 delete from t where x = i;
>                 delete from t where x = i;
>         end loop;
> end;
> /
> 
> alter session set sql_trace=true;
> exec p;
> exit
> 
> 
> --- Em oracle_br@yahoogrupos.com.br, "Ivan Ricardo Schuster" 
> <[EMAIL PROTECTED]> escreveu
> >
> > Esqueci da versão:
> > 9.2.0.4
> > 
> > -----Mensagem original-----
> > De: oracle_br@yahoogrupos.com.br 
> [mailto:[EMAIL PROTECTED] Em
> > nome de Ivan Ricardo Schuster
> > Enviada em: quinta-feira, 29 de dezembro de 2005 14:05
> > Para: oracle_br@yahoogrupos.com.br
> > Assunto: [oracle_br] bind com comentários
> > 
> > Pessoal, uma duvida:
> > 
> > Tenho um sql que é executado repetidas vezes, utilizo bind na 
> clausula
> > where, mas tenho um comentário que sempre é diferente. 
> > 
> > 
> > Ex:
> > 
> > Meu comando básico é:
> > Delete from tabela where data=:vData
> > 
> > Executo:
> > "Delete /*20051222*/ from tabela where data=:vData" quando vData é
> > '22/12/2005'
> > 
> > "Delete /*20051223*/ from tabela where data=:vData" quando vData é
> > '23/12/2005'
> > 
> > A dúvida: O oracle considera isso como comandos diferentes?
> > 
> > 
> > 
> > ------------------------------------------------------------------
--
> --------
> > ----------------------------------------------
> > Atenção! As mensagens deste grupo são de acesso público e de 
inteira
> > responsabilidade de seus remetentes.
> > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
> > ------------------------------------------------------------------
--
> --------
> > ----------------------------------------------
> ______________________________
> > _______________________________________
> > Area de download do grupo - 
> http://www.4shared.com/dir/101727/a4dcc423  
> > Links do Yahoo! Grupos
> >
>







--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________
Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423  
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:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a