<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dia a dia Oracle &#187; procedures</title>
	<atom:link href="http://www.diaadiaoracle.com.br/category/procedures/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diaadiaoracle.com.br</link>
	<description></description>
	<lastBuildDate>Mon, 01 Aug 2011 22:36:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Oracle Tuning &#8211; Exportando Estatísticas de Tabelas</title>
		<link>http://www.diaadiaoracle.com.br/2011/08/01/oracle-tuning-exportando-estatisticas-de-tabelas/</link>
		<comments>http://www.diaadiaoracle.com.br/2011/08/01/oracle-tuning-exportando-estatisticas-de-tabelas/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 22:36:23 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[pl/sql]]></category>
		<category><![CDATA[procedures]]></category>
		<category><![CDATA[query]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=98</guid>
		<description><![CDATA[Fala PessoAll, Depois de muito tempo sem postar, estou eu aqui de novo para falar de mais um recurso usado no nosso Diaadia. Desta vez o problema foi o seguinte: Temos uma base de produção 9i que está em plena fase de migração para 11g, claro que para que esta migração aconteça, temos que ter [...]]]></description>
			<content:encoded><![CDATA[<p>Fala PessoAll,</p>
<p>Depois de muito tempo sem postar, estou eu aqui de novo para falar de mais um recurso usado no nosso Diaadia.</p>
<p>Desta vez o problema foi o seguinte:</p>
<p>Temos uma base de produção 9i que está em plena fase de migração para 11g, claro que para que esta migração aconteça, temos que ter a homologação de vários sistemas em 11g, que atualmente rodam na nossa base de produção 9i. Em uma das homologações deste sistema, o analista nos acionou informando que um processo que rodava na base 9i em 10 minutos, já estava a mais de 1 hora rodando na base 11g, sem sucesso.</p>
<p>Vamos as análises&#8230;</p>
<p>Passo 1: Identificar que comando estava causando nosso problema, para isso solicitei ao analista rodar a rotina dele habilitando um trace, para tentarmos identificar. Foi solicitado adicionar os seguintes comandos na execução:</p>
<p><code>begin<br />
   --Habilita geracao do trace.<br />
   execute immediate('alter session set tracefile_identifier=''TRACE_PROC_LENTA''');<br />
   sys.dbms_support.start_trace(true, true);<br />
   -- Call the procedure<br />
   PROCEDURE_DO_ANALISTA_LENTA;<br />
   --Finaliza geracao do trace.<br />
   sys.DBMS_SUPPORT.STOP_TRACE;<br />
end;<br />
/</code></p>
<p>Após concluído o processo, temos que procurar na nossa pasta UDUMP o trace que foi gerado com o identificador &#8220;_TRACE_PROC_LENTA&#8221;.</p>
<p>Analisando o trace&#8230;<br />
<code><br />
call     count       cpu    elapsed       disk      query    current        rows<br />
------- ------  -------- ---------- ---------- ---------- ----------  ----------<br />
Parse      791      0.02       1.25          0          3          0           0<br />
Execute  72124      9.77     127.63        365       3759      75246        7469<br />
Fetch    81349    109.26    2466.37     229643   14999926          0       75146<br />
------- ------  -------- ---------- ---------- ---------- ----------  ----------<br />
total   154264    119.05    2595.27     230008   15003688      75246       82615<br />
</code></p>
<p>Identificamos que o processo rodou em 2595.27 segundos, total!</p>
<p>E temos um comando único, que rodou em 2289.73 segundos. Ficou claro que este é o culpado não??</p>
<p><code><br />
select COL1, COL2, COL3 from MINHA_TABELA</p>
<p>call     count       cpu    elapsed       disk      query    current        rows<br />
------- ------  -------- ---------- ---------- ---------- ----------  ----------<br />
Parse        1      0.00       0.00          0          0          0           0<br />
Execute   5430      1.11       3.54          0          0          0           0<br />
Fetch     5430    106.61    2286.19     222786   14703253          0        3431<br />
------- ------  -------- ---------- ---------- ---------- ----------  ----------<br />
total    10861    107.72    2289.73     222786   14703253          0        3431</p>
<p>Misses in library cache during parse: 0<br />
Optimizer mode: ALL_ROWS<br />
Parsing user id: 214  (OWNER)   (recursive depth: 1)</p>
<p>Rows     Row Source Operation<br />
-------  ---------------------------------------------------<br />
      1  TABLE ACCESS BY INDEX ROWID MINHA_TABELA (cr=7 pr=0 pw=0 time=68 us cost=5 size=33 card=1)<br />
     13   INDEX RANGE SCAN MINHA_TABELA_IDX2 (cr=4 pr=0 pw=0 time=40 us cost=4 size=0 card=1)(object id 32870)<br />
</code></p>
<p>Como podemos ver, este select está sendo executado utilizando um índice, o MINHA_TABELA_IDX2. Ótimo, agora vamos comparar este plano de execução, com o plano de execução que temos em produção. Eis o plano de produção: </p>
<p><code><br />
Rows     Row Source Operation<br />
-------  ---------------------------------------------------<br />
      1  TABLE ACCESS BY INDEX ROWID MINHA_TABELA (cr=7 pr=0 pw=0 time=68 us cost=5 size=33 card=1)<br />
     13   INDEX RANGE SCAN MINHA_TABELA_PK (cr=4 pr=0 pw=0 time=40 us cost=4 size=0 card=1)<br />
</code></p>
<p>Opa&#8230;. qual a diferença? Nesta base a minha query acessa os dados pela PK, e não pelo índice! Matamos a parada!!! </p>
<p>Como resolver?</p>
<p>A base onde a homologação estava sendo feita era uma base 11g criada com uma cópia antiga de produção, que não vinha sendo coletada estatística, que estava sendo constantemente alterada pelos testes e que não estava 100%. Para coletar estatísticas novamente desta tabela, seria mais complicado e demorado, pois a tabela tem 667.000.000 de linhas, claro, o teste tem que ser agora!!!!</p>
<p>Lembramos então que tinhamos uma cópia fresquinha da base de produção, que tinha sido recém migrada para 11g, ou seja, estava em 11g, mas tinha as estatísticas certinhas de produção, onde a query estava rápida.</p>
<p>A solução encontrada foi: <b>Exportar as estatísticas desta tabela</b>.</p>
<p>Então, vamos lá&#8230;</p>
<p>Passo 1: Criar uma tabela de estatísticas na base origem, para receber as estatísticas atuais da tabela:</p>
<p><code><br />
SQL> exec SYS.DBMS_STATS.CREATE_STAT_TABLE(ownname => 'DBAGABOS', stattab => 'TLISTENER_STATS');<br />
Procedimento PL/SQL concluÝdo com sucesso.<br />
SQL><br />
</code></p>
<p>Passo 2: Exportar as estatísticas atuais da tabela na base de origem, para a tabela de esatísticas que você criou:</p>
<p><code><br />
SQL> exec DBMS_STATS.EXPORT_TABLE_STATS(ownname => 'DBAGABOS', tabname => 'TLISTENER', stattab => 'TLISTENER_STATS', cascade => true);<br />
Procedimento PL/SQL concluÝdo com sucesso.<br />
SQL><br />
</code></p>
<p>Passo 3: Exportar esta tabela gerada&#8230;</p>
<p><code><br />
C:\Users\GersonJr>exp dbagabos@orcl tables=TLISTENER_STATS file=dump_stats.dmp<br />
Export: Release 10.2.0.3.0 - Production on Seg Ago 1 19:23:58 2011<br />
Copyright (c) 1982, 2005, Oracle.  All rights reserved.<br />
Senha:<br />
Conectado a: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production<br />
With the Partitioning, OLAP and Data Mining options<br />
ExportaþÒo executada no conjunto de caracteres de WE8MSWIN1252  e no conjunto de caracteres de AL16UTF16 NCHAR<br />
Sobre exportar tabelas especificadas ... via Caminho Convencional ...<br />
. . exportando tabela                TLISTENER_STATS          113 linhas exportadas<br />
ExportaþÒo encerrada com sucesso, sem advertÛncias.<br />
C:\Users\GersonJr><br />
</code></p>
<p>Passo 4: Importar a tabela de estatísticas que você exportou, no banco de destino&#8230;</p>
<p><code><br />
C:\Users\GersonJr>imp dbagabos@orcl_destino tables=TLISTENER_STATS file=dump_stats.dmp<br />
Import: Release 10.2.0.3.0 - Production on Seg Ago 1 19:24:58 2011<br />
Copyright (c) 1982, 2005, Oracle.  All rights reserved.<br />
Senha:<br />
Conectado a: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production<br />
With the Partitioning, OLAP and Data Mining options<br />
Arquivo de exportaþÒo criado por EXPORT:V10.02.01 via caminho convencional<br />
AdvertÛncia: os objetos foram exportados por DBAGABOS; nÒo por vocÛ<br />
importaþÒo realizada nos conjuntos de caracteres WE8MSWIN1252 e NCHAR AL16UTF16<br />
. importando objetos de DBAGABOS para DBAGABOS<br />
. importando objetos de DBAGABOS para DBAGABOS<br />
. . importando table              "TLISTENER_STATS"          113 linhas importadas<br />
ImportaþÒo encerrada com sucesso, sem advertÛncias.<br />
C:\Users\GersonJr><br />
</code></p>
<p>Passo 5: Importar as estatísticas para a tabela, lendo da tabela de estatísticas que você importou.<br />
<code><br />
exec DBMS_STATS.IMPORT_TABLE_STATS(ownname => 'DBAGABOS', tabname => ‘TLISTENER’, stattab => ‘TLISTENER_STATS’, cascade => true, no_invalidate => true);<br />
</code></p>
<p>E agora é só você testar seu plano de execução e verificar se na base nova a query está se comportando da mesma forma que na base antiga.</p>
<p>Algumas considerações:<br />
1 &#8211; O problema ocorreu na base 11g, porém para criar o post refiz os comandos na base instalada no meu PC, que é 10.2.0.3, como podem ver nos comandos acima.</p>
<p>2 &#8211; Estes passos não querem dizer que há uma garantia 100% da sua query ficar igual a sua base de origem, lembre-se que em performance existem inúmeros outros pontos que são verificados para o banco montar um plano de execução.</p>
<p>3 &#8211; A idéia deste post é mostrar este recurso de export/import de estatísticas, que é simples e rápido de fazer, e pode ajudar-nos em vários casos.</p>
<p>Qualquer coisa, estou à disposição para dúvidas e/ou sugestões!</p>
<p>Grande abraço.</p>
<p>Atc.<br />
Gerson Júnior<br />
gerson.vasconcelos@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diaadiaoracle.com.br/2011/08/01/oracle-tuning-exportando-estatisticas-de-tabelas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle &#8211; Sinônimos públicos (public synonyms). Quando devo usar?</title>
		<link>http://www.diaadiaoracle.com.br/2010/09/20/oracle-sinonimos-publicos-public-synonyms-quando-devo-usar/</link>
		<comments>http://www.diaadiaoracle.com.br/2010/09/20/oracle-sinonimos-publicos-public-synonyms-quando-devo-usar/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 19:31:21 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[procedures]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[public synonym]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=81</guid>
		<description><![CDATA[Fala PessoALL, Depois de muito tempo sem escrever, vamos nós de novo! Tenho me deparado sempre com dúvidas de desenvolvedores quanto ao uso de sinônimos públicos. Devemos usar? Não devemos? Cria pra todos os objetos? Não cria? Vamos tentar de uma vez por todas desvendar esse mistério de public synonym no Oracle. Bom, sinônimos, como [...]]]></description>
			<content:encoded><![CDATA[<p>Fala PessoALL,</p>
<p>Depois de muito tempo sem escrever, vamos nós de novo!</p>
<p>Tenho me deparado sempre com dúvidas de desenvolvedores quanto ao uso de sinônimos públicos. Devemos usar? Não devemos? Cria pra todos os objetos? Não cria? Vamos tentar de uma vez por todas desvendar esse mistério de <b>public synonym</b> no <b>Oracle</b>.</p>
<p>Bom, sinônimos, como bem sabemos são palavras que tem o mesmo significado&#8230; isso no português! No Oracle, sinônimo é um pouco diferente, porém sendo um pouco igual! Confuso não? Rs. Vamos simplificar!</p>
<p>No Oracle o sinônimo público (<b>public synonym</b>) é um objeto de banco, cujo dono é PUBLIC (ou seja, todo mundo) que &#8220;aponta&#8221; para um outro objeto de um determinado schema. Como se fosse uma espécie de link. Por exemplo:</p>
<p>Imagine que você tem uma tabela no schema <code>DONOSIS</code> chamada <code>MINHATABELA</code>. Caso algum usuário que não seja <code>DONOSIS</code> deseje executar um select nesta tabela, você faz o seguinte comando: <code>select * from donosis.minhatabela</code>, mas e se eu não quiser colocar o dono do objeto na frente? Seja para que meus usuários não saibam quem é o dono dos objetos (questões de segurança), seja para que eu simplifique a codificação? Aí eu uso o sinônimo público! Eu crio um sinônimo púbico chamado <code>MINHATABELA</code> que aponta para o objeto de banco: <code>DONOSIS.MINHATABELA</code>. O código para criação é:</p>
<p><code>create or replace public synonym MINHATABELA for DONOSIS.MINHATABELA;</code></p>
<p>Após a criação deste sinônimo público, qualquer usuário do banco que executar o select <code>select * from MINHATABELA;</code> conseguirá de forma transparente acessar a tabela <code>MINHATABELA</code> do schema <code>DONOSIS</code> sem nem saber que ela se encontra neste schema! Simples não?</p>
<p>Isso pode ser utilizado para qualquer objeto de banco, como: Views, Procedures, Functions, Packages, Tables, etc.</p>
<p>Claro que para que o acesso ao objeto seja concluído, o usuário que está acessando tem que possuir privilégio no objeto de destino. Ou seja, mesmo com sinônimo público, os privilégios que foram concedidos no objeto de destino continuam funcionando normalmente.</p>
<p><b>Vantagens?</b><br />
Simplicidade de codificação (não precisa colocar o nome do dono do objeto na frente).<br />
Transparência de propriedade (não se sabe quem é o dono do objeto).<br />
Simples modificação de objetos (você pode mudar o dono dos objetos, sem impacto algum).</p>
<p><b>Quando não usar?</b><br />
Quando o objeto só será utilizado pelo próprio dono. Por exemplo: Se nossa tabela <code>MINHATABELA</code> fosse utilizada apenas por objetos do schema <code>DONOSIS</code>, não tinhamos a menor necessidade de ter um sinônimo, o objeto sendo do próprio schema, não precisamos colocar o schema na frente!</p>
<p><b>Erros mais comuns:</b><br />
<b>ORA-01775</b> loop chain of synonyms &#8211; Este erro ocorre geralmente quando ocorre algum problema com o objeto destino que o sinônimo aponta, por exemplo: Se for uma procedure que está inválida; Se for uma tabela que não existe; algo do tipo!</p>
<p>É isso pessoal, espero que tenha ficado claro como funciona e para que serve os sinônimos públicos (<b>public synonym</b>). Por enquanto é só!</p>
<p>Qualquer coisa, basta entrar em contato. </p>
<p>Atc.<br />
Gerson Júnior<br />
gerson.vasconcelos@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diaadiaoracle.com.br/2010/09/20/oracle-sinonimos-publicos-public-synonyms-quando-devo-usar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oralce PL/SQL &#8211; Funções (Funtions) e Procedures</title>
		<link>http://www.diaadiaoracle.com.br/2009/03/27/oralce-plsql-funcoes-funtions-e-procedures/</link>
		<comments>http://www.diaadiaoracle.com.br/2009/03/27/oralce-plsql-funcoes-funtions-e-procedures/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 20:22:00 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[functions]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[pl/sql]]></category>
		<category><![CDATA[procedures]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=6</guid>
		<description><![CDATA[Fala PessoAll, Bom&#8230; hoje em mais um dia a dia de trabalho, rolou mais uma dúvida sobre o uso de procedures e funções no PL/SQL. Aí fiz a seguinte pergunta: Qual a diferença entre Procedure e Function no PL/SQL? Aí surgiram aquelas velhas respostas decoradas da faculdade: &#8220;Procedure não retorna valor!&#8221;, &#8220;Função retorna valor e [...]]]></description>
			<content:encoded><![CDATA[<p>Fala PessoAll,</p>
<p>Bom&#8230; hoje em mais um dia a dia de trabalho, rolou mais uma dúvida sobre o uso de procedures e funções no PL/SQL. Aí fiz a seguinte pergunta: Qual a diferença entre Procedure e Function no PL/SQL? Aí surgiram aquelas velhas respostas decoradas da faculdade: &#8220;Procedure não retorna valor!&#8221;, &#8220;Função retorna valor e procedure não retorna.&#8221;, entre outras. Vamos lá então:</p>
<p>No Oracle a diferença básica entre uma e outra é que a Function OBRIGATÓRIAMENTE tem que retornar um valor, você pode até criar a função e compilar ela sem um Return, mas na hora que você rodar esta função você vai obter um erro oracle dizendo que: &#8220;Function Retorned withou value&#8221;, ou seja, função não retorna nenhum valor (algo parecido), e não funciona. Porque a diferença básica? Porque procedures no Oracle também podem retornar valores, isso mesmo, basta você criar um parametro do tipo OUT, assim:<br />
<code><br />
create or replace procedure pr_teste(p_t number, p_ret out varchar2) is<br />
begin<br />
if(p_t = 1) then<br />
p_ret := 'É 1';<br />
else<br />
p_ret := 'Não é 1';<br />
end if;<br />
end;<br />
</code><br />
Neste exemplo de código, note que estamos atribuindo ao parâmetro <code>p_ret</code> o valor que será retornado para o local que chamou essa procedure (veremos exemplo desta chamada nos exemplos a seguir).</p>
<p>Ah&#8230; então, se as duas retorna valor, porque eu tenho procedure e function? E porque eu uso uma e não outra ou a outra e não uma?</p>
<p>Vamos aos pontos de cada uma delas:</p>
<p><strong>Nas Funtions:</strong><br />
- Pode ser usada em comandos select, insert etc para ser retornada como uma coluna da query:<br />
<code>select codigo, nome, fn_calculaIdade(codigo) Idade from pessoas;</code> Neste exemplo, fn_calculaIdade recebe o codigo da pessoa como parametro e retorna a idade dela, isso será exibido como uma coluna na query com nome <code>Idade</code></p>
<p>- Pode ser atribuida diretamente a uma variável:<br />
<code><br />
declare<br />
v_idade number;<br />
begin<br />
.<br />
.<br />
v_idade := fn_calculaIdade(codigo);<br />
.<br />
.<br />
end;<br />
</code></p>
<p>Neste exemplo, estamos no meio de um bloco PL/SQL e atribuímos diretamente a uma variável o valor que retornará da função.</p>
<p>E mais algumas coisas sobre função.</p>
<p><strong>Nas Procedures:</strong><br />
- O grande &#8220;plus&#8221; das procedures é: Podem retornar mais de um resultado! Ah&#8230; isso mesmo, essa é a grande vantagem das procedures, existe a possibilidade de ser retornado mais de um retorno (retornar retorno, coisa feia não? você entenderá jájá), coisa que é completamente impossível usando função. Funções só retornam um único resultado.</p>
<p>Complicou? Vamos ao exemplo:</p>
<p>Primeiro vamos criar uma procedure com 3 (isso mesmo 3, três, III, rsrs) parâmetros de retorno:</p>
<p><code><br />
create or replace procedure pr_buscaEndereco(p_codigo_pessoa number, p_rua out varchar2, p_bairro out varchar2, p_cidade out varchar2) is<br />
begin<br />
begin<br />
select rua,<br />
estado,<br />
cidade<br />
into p_rua,<br />
p_bairro,<br />
p_cidade<br />
from pessoas<br />
where codigo = p_codigo_pessoa;<br />
exception<br />
when no_data_found then<br />
p_rua    := 'Rua não encontrada.';<br />
p_bairro := 'Bairro não encontrada.';<br />
p_cidade := 'Cidade não encontrada.';<br />
end;<br />
end;<br />
</code><br />
Note que os parâmetros que serão usados para retorno, tem uma cláusula OUT na frente do tipo, isso que diferencia ele de um parâmetro comum, IN.</p>
<p>Ah&#8230; bom, mas e como é que eu vou usar isso? Assim:<br />
<code><br />
declare<br />
v_pessoa_rua    varchar2(100);<br />
v_pessoa_bairro varchar2(100);<br />
v_pessoa_cidade varchar2(100);<br />
begin<br />
pr_teste(212, v_pessoa_rua, v_pessoa_bairro, v_pessoa_cidade);<br />
dbms_output.put_line('Endereço da pessoa 212: Rua: '||v_pessoa_rua||' Bairro: '||v_pessoa_bairro||' Cidade: '||v_pessoa_cidade);<br />
end;<br />
</code></p>
<p>Neste exemplo, temos três variáveis criadas, estas três variáveis são passadas na chamada da procedure e como estes parâmetros no qual elas são passadas são OUT, irão retornar algum valor, que será o valor da variável após execução da procedure.</p>
<p>É isso aí, portanto, caso você precise de uma função que retorne mais de um valor, não tente criar uma função genérica cheia de IF&#8217;s e chamar ela mais de uma vez fazendo o mesmo select em colunas diferentes, use uma procedure com mais de um parâmetro OUT que isso provavelmente resolverá seus problemas.</p>
<p>Momento DBA: Lembrem que quanto menos funções são chamadas, mais agradável para o banco. A cada função que chamamos o banco vai ter que ver, executar, retornar, isso usa memória, processador e etc. Se no lugar de 10 chamadas para uma função voce usar uma procedure com 10 parametros OUT, é bem menos &#8220;doloroso&#8221; para o banco. Outra coisa que é muito importante e que ocorre muito é usar função para retornar como uma determinada coluna de um comando select&#8230; lembre-se que se está função está na clausula <code>select</code> ela será chamada exatamente a quantidade de vezes de quantos registros existirem. No exemplo da função <code>fn_calculaIdade</code> que citei lá em cima, se tivermos 1.000.000 de registros, esta função será executada 1.000.000 de vezes, se é uma função mais robusta e complexa, imagine pra onde vai a performance da sua query. Além da perda de performance na query, de quebra você ainda perde uma credibilidade com o DBA! Que quando você degradar o banco todo, ele vai ficar bravo com você!!</p>
<p>Grande abraço a todos.</p>
<p>Fiquem a vontade para comentários e/ou e-mails.</p>
<p>Atc.<br />
Gerson Júnior<br />
gerson.vasconcelos@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diaadiaoracle.com.br/2009/03/27/oralce-plsql-funcoes-funtions-e-procedures/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

