Re: RES: [oracle_br] bind com comentários
Sim, são comandos diferentes, pois o texto é diferente. O correto e ideal é que você retire estes comentários do comando enviado ao BD. --- 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
RES: [oracle_br] bind com comentários
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
Re: RES: [oracle_br] bind com comentários
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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse1 0.00 0.00 0 0 0 0 Execute 10 0.00 0.00 0 30 3 2 Fetch0 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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse1 0.00 0.00 0 0 0 0 Execute 10 0.00 0.00 0 30 0 0 Fetch0 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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse2 0.00 0.00 0 0 0 0 Execute 20 0.00 0.01 0 60 3 2 Fetch0 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:
RES: RES: [oracle_br] bind com comentários
Opa! Obrigado pela ajuda Marcio, vou ter que analisar o custo/beneficio destes comentarios... -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Marcio Portes Enviada em: quinta-feira, 29 de dezembro de 2005 15:21 Para: oracle_br@yahoogrupos.com.br Assunto: Re: RES: [oracle_br] bind com comentários 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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse1 0.00 0.00 0 0 0 0 Execute 10 0.00 0.00 0 30 3 2 Fetch0 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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse1 0.00 0.00 0 0 0 0 Execute 10 0.00 0.00 0 30 0 0 Fetch0 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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse2 0.00 0.00 0 0 0 0 Execute 20 0.00 0.01 0 60 3 2 Fetch0 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
Re: RES: [oracle_br] bind com comentários
É : 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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 1 Fetch0 0.00 0.00 0 0 0 0 --- -- -- -- -- -- -- total2 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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse2 0.00 0.00 0 0 0 0 Execute 20 0.00 0.00 0 60 3 2 Fetch0 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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse1 0.00 0.00 0 0 0 0 Execute 10 0.00 0.00 0 30 3 2 Fetch0 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 cpuelapsed disk query currentrows --- -- -- -- -- -- -- Parse1 0.00 0.00 0 0 0 0 Execute 10 0.00 0.00 0 30 0 0 Fetch0 0.00 0.00 0 0 0 0 --- -- -- -- -- -- -- total 11 0.00 0.00 0 30 0 0 Misses in library