É : 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