<?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; decode</title>
	<atom:link href="http://www.diaadiaoracle.com.br/category/decode/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>Usando CASE no Oracle SQL.</title>
		<link>http://www.diaadiaoracle.com.br/2009/08/04/usando-case-no-oracle-sql/</link>
		<comments>http://www.diaadiaoracle.com.br/2009/08/04/usando-case-no-oracle-sql/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 13:18:00 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[case]]></category>
		<category><![CDATA[decode]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=13</guid>
		<description><![CDATA[Fala PessoAll, Bom, conforme prometido no Post anterior, estou aqui para dar uma apimentada na utilização da função DECODE usando SQL Oracle. A funcionalidade que iremos falar hoje é a CASE. Esta funcionalidade é muito boa e dá uma dinâmica muito interessante a comandos SQL, em muitas vezes nos poupando de ter que fazer uma [...]]]></description>
			<content:encoded><![CDATA[<p>Fala PessoAll,</p>
<p>Bom, conforme prometido no Post anterior, estou aqui para dar uma apimentada na utilização da função <strong>DECODE</strong> usando <strong>SQL Oracle</strong>.</p>
<p>A funcionalidade que iremos falar hoje é a <strong>CASE</strong>. Esta funcionalidade é muito boa e dá uma dinâmica muito interessante a comandos <strong>SQL</strong>, em muitas vezes nos poupando de ter que fazer uma <strong>Stored Prodecure</strong> ou uma <strong>Function</strong> para fazer alguma coisa que um simples <strong>SQL</strong> pode resolver.</p>
<p>Para não fugir dos costumes&#8230; vamos ao exemplo.</p>
<p>Suponha que você tenha 3 classificações diferentes para seus vendedores, que funcionam da seguinte forma: Se o cara vendeu entre R$0.00 e R$1,000.00 ele é classificado como &#8220;Ruim&#8221;, se foi entre R$1,001.00 e R$4,000.00 ele é classificado como &#8220;Bom&#8221;, se foi entre R$4,001.00 e R$8,000.00 ele é classificado como &#8220;Ótimo&#8221; e se for acima de R$8,001.00 ele é considerado como &#8220;Fenomenal&#8221;, e você precisa exibir isso no relatório para sua gerência.</p>
<p>Como fazer isso?</p>
<p>Aí você começa a pensar&#8230;<br />
<strong>DECODE</strong>? Não dá&#8230; tenho faixa de valores, e não valores específicos!</p>
<p>Cria uma <strong>View</strong>? Não&#8230; uma view é um mero <strong>Select</strong>, não vai resolver!</p>
<p>Ah&#8230;. claro! Cria uma função!!! Na função eu passo o valor que o cara vendeu e ela me retorna qual a classificação do cara! Perfeito!<br />
É&#8230;. funcionar vai funcionar, mas você tem que criar um <strong>objeto no banco</strong>, tem que criar um <strong>Script</strong>, tem que se preocupar com <strong>Grant&#8217;s</strong> e todos os demais aspectos para que criemos um novo objeto!</p>
<p>Não seria mais simples que no próprio <strong>Select</strong> a gente resolvesse esse problema? SIM!!! Claro!! Porque não. Para isso, vamos usar a funcionalidade <strong>CASE</strong>. Como faríamos isso, para este caso?</p>
<p>Agora sim, cenário montado, vamos ao exemplo (de verdade):</p>
<p><code><br />
select v.nome_vendedor,<br />
ve.mes,<br />
ve.vlr_meta,<br />
ve.vlr_venda,<br />
case<br />
when ve.vlr_venda between 0 and 1000 then<br />
'Ruim'<br />
when ve.vlr_venda between 1001 and 4000 then<br />
'Bom'<br />
when ve.vlr_venda between 4001 and 8000 then<br />
'Ótimo'<br />
when ve.vlr_venda &gt; 8001 then<br />
'Fenomenal'<br />
end classificacao_vendedor<br />
from vendedores v,<br />
vendas     ve<br />
where ve.cod_vendedor = v.cod_vendedor;<br />
and ve.mes          = '07/2009';<br />
</code></p>
<p>Que beleza não? Resolvido nosso provlema! Temos agora em nosso <strong>SQL</strong> a coluna <code>classificacao_vendedor</code> que nos dá a informação que precisamos, sem problemas com criação de função nem nada do tipo!</p>
<p>Bom não? Simples de usar, rápido e tudo quanto é de vantagem!</p>
<p>É isso aí, creio que a partir desse exemplo dá pra &#8220;voar&#8221; bem alto! Agora é só adaptar para sua necessidade e tá tudo certo!!</p>
<p>Espero que gostem e comentem!</p>
<p>Atc.<br />
Gerson Júnior<br />
gerson.vasconcelos@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diaadiaoracle.com.br/2009/08/04/usando-case-no-oracle-sql/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Função DECODE no Oracle SQL</title>
		<link>http://www.diaadiaoracle.com.br/2009/07/15/funcao-decode-no-oracle-sql/</link>
		<comments>http://www.diaadiaoracle.com.br/2009/07/15/funcao-decode-no-oracle-sql/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 16:58:00 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[decode]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=12</guid>
		<description><![CDATA[Fala PessoAll, Hoje vamos falar de Construção de SQL. As vezes precisamos fazer umas coisas mais avançadas num comando SQL e aí precisamos utilizar alguns recursos mais interessantes que o Oracle nos proporciona. Quem nunca pensou: &#8220;Ai como seria bom se tivesse um IF no select&#8221;. Tem sim! O primeiro recurso que podemos utilizar é [...]]]></description>
			<content:encoded><![CDATA[<p>Fala PessoAll,</p>
<p>Hoje vamos falar de <strong>Construção de SQL</strong>.</p>
<p>As vezes precisamos fazer umas coisas mais avançadas num comando SQL e aí precisamos utilizar alguns recursos mais interessantes que o <strong>Oracle</strong> nos proporciona.</p>
<p>Quem nunca pensou: &#8220;Ai como seria bom se tivesse um IF no select&#8221;. Tem sim!</p>
<p>O primeiro recurso que podemos utilizar é o <strong>DECODE</strong>, essa <strong>função</strong> é bem interessante e quebra um bocado de galhos, vamos ver um exemplo pra &#8220;clarear&#8221; as idéias.</p>
<p>Suponha que você tem uma tabela que contém o sexo das pessoas, mas na tabela só armazena F ou M e você quer que seja mostrado &#8220;Masculino&#8221; e &#8220;Feminino&#8221; no retorno do seu <strong>select</strong>, como fazemos isso no select? Com <strong>DECODE</strong>!</p>
<p>Assim:</p>
<p><code><br />
select nome,<br />
dt_nascimento,<br />
decode(sexo,<br />
'M', 'Masculino',<br />
'F', 'Feminino',<br />
'Indefinido') sexo<br />
from pessoas;<br />
</code></p>
<p>Como funciona isso&#8230; o <strong>DECODE</strong> testa o valor que você passa no primeiro parâmetro e vai comparando com o que você especifica e retorna o que você deseja. Complexo não? NÃO!! Vamos explicar o nosso exemplo:</p>
<p>No exemplo acima é passado o campo <code>sexo</code>, em seguida passamos o primeiro valor de teste e o que vai retornar caso encontre este valor, que neste caso é: Se encontrar <code>'M'</code> retorne <code>'Masculino'</code>, sempre aos pares. Ou seja, valor encontrado e logo depois o valor que vai retornar. Como podemos ver, depois vem mais um par&#8230; <code>'F'</code> e <code>'Feminino'</code> o que nos diz que se encontrar um <code>'F'</code>, traga <code>'Feminino'</code> na coluna.</p>
<p>Tá, mas e esse último valor que tem <code>'Indefinido'</code>? Ele não tem par!! Vai dar erro? Não, esse é uma espécie de <strong>ELSE</strong> do <strong>DECODE</strong>&#8230; se ele não encontrar nenhuma das alternativas passadas para retornar um valor especificado, ele retorna esse último valor. No nosso exemplo, podemos ver que caso não encontre <code>'M'</code> nem <code>'F'</code> no campo, ele irá retornar o valor <code>'Indefinido'</code> para a coluna&#8230; agora ficou claro!</p>
<p>O <strong>DECODE</strong> não tem um limite mínimo nem máximo de &#8220;pares de teste e retorno&#8221;, você pode ir especificando os valores e os retornos de acordo com sua necessidade.</p>
<p>Bom, esse é um recurso do <strong>Oracle</strong> que pode ser bem útil para pessoas que fazem <strong>SQL</strong>, que elaboram <strong>relatórios</strong>, que vivem fazendo <strong>query</strong> entre outros casos.</p>
<p>Como podemos verificar, para usar o <strong>DECODE</strong> nós temos que saber os valores que estão na coluna para que possamos informar qual o retorno caso determinado valor seja encontrado, mas&#8230; e se eu quiser utilizar uma faixa de valores por exemplo? Tipo&#8230; se coluna <code>nota</code> estiver entre <code>0</code> e <code>3</code> retorno <code>'Péssimo'</code>, entre <code>4</code> e <code>5</code> retorne <code>'Ruim'</code>, entre <code>6</code> e <code>8</code> retorne <code>'Bom'</code> e acima de <code>8</code> retorne <code>'Ótimo'</code>? Não dá pra fazer isso com <strong>DECODE</strong> né? Mas, tenha calma&#8230; no próximo post falaremos sobre uma outra <strong>função</strong> do <strong>Oracle</strong> que é uma espécie de <strong>DECODE</strong> avançado, que permite esse tipo de teste e muito mais.</p>
<p>Espero que gostem e que seja útil. Até a próxima.</p>
<p>Não exitem em comentar e/ou mandar 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/07/15/funcao-decode-no-oracle-sql/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
	</channel>
</rss>

