<?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; sql</title>
	<atom:link href="http://www.diaadiaoracle.com.br/category/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diaadiaoracle.com.br</link>
	<description></description>
	<lastBuildDate>Thu, 08 Apr 2010 17:33:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Função de grupo para multiplicar, SUM -&gt; MULT</title>
		<link>http://www.diaadiaoracle.com.br/2010/04/08/funcao-de-grupo-para-multiplicar-sum-mult/</link>
		<comments>http://www.diaadiaoracle.com.br/2010/04/08/funcao-de-grupo-para-multiplicar-sum-mult/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 17:33:36 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[aula oracle]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[dinamico]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[pl/sql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[functions group]]></category>
		<category><![CDATA[group by]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[sum]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=78</guid>
		<description><![CDATA[Fala pessoal,
Recebi um email de um leitor solicitando uma solução para que fosse desenvolvida uma função semelhante ao SUM, já nativo do banco de dados Oracle, só que fizesse multiplicação e não soma, como o SUM faz atualmente!
Por exemplo:
Tabela: FATORIAL
Campo: VALOR
Valor
     5
     6
     [...]]]></description>
			<content:encoded><![CDATA[<p>Fala pessoal,</p>
<p>Recebi um email de um leitor solicitando uma solução para que fosse desenvolvida uma função semelhante ao SUM, já nativo do banco de dados Oracle, só que fizesse multiplicação e não soma, como o SUM faz atualmente!</p>
<p>Por exemplo:</p>
<p>Tabela: FATORIAL<br />
Campo: VALOR</p>
<p>Valor<br />
     5<br />
     6<br />
     3<br />
     2<br />
     3</p>
<p>Portanto, se usarmos o SUM, teriamos um resultado assim: 5 + 6 + 3 + 2 + 3 = 19<br />
O pretendido é: 5 * 6 * 3 * 2 * 3 = 540</p>
<p>A sugestão que dei foi: Criar uma função própria que faça a multiplicação dos valores. A implementação/testes ficou assim:</p>
<p><code><br />
SQL> --Cria tabela<br />
SQL> create table fatorial(campo1 number, valor number);<br />
Tabela criada.<br />
SQL> --Insere valores<br />
SQL> insert into fatorial values (1,2);<br />
1 linha criada.<br />
SQL> insert into fatorial values (1,3);<br />
1 linha criada.<br />
SQL> insert into fatorial values (2,4);<br />
1 linha criada.<br />
SQL> insert into fatorial values (2,4);<br />
1 linha criada.<br />
SQL><br />
</code></p>
<p>Em seguida criamos a seguinte function:</p>
<p><code><br />
SQL> create or replace function mult_vals(p_filtro number) return number is<br />
  2     v_retorno number;<br />
  3  begin<br />
  4     v_retorno := 0;<br />
  5     for i in (select valor from fatorial where campo1 = p_filtro)<br />
  6     loop<br />
  7        if (v_retorno = 0) then<br />
  8           v_retorno := 1;<br />
  9        end if;<br />
 10        v_retorno := v_retorno*i.valor;<br />
 11     end loop;<br />
 12     return v_retorno;<br />
 13  end;<br />
 14  /<br />
FunþÒo criada.<br />
SQL><br />
</code></p>
<p>E depois é só testar:</p>
<p><code><br />
SQL> select campo1, mult_vals(campo1)<br />
  2    from fatorial<br />
  3   group by campo1;<br />
    CAMPO1 MULT_VALS(CAMPO1)<br />
---------- -----------------<br />
         1                 6<br />
         2                16<br />
SQL><br />
</code></p>
<p>Funcionou como uma luva não?</p>
<p>É isso, o que não tem nativo a gente faz!<br />
Neste caso fiz algo bem específico, só pra atender a necessidade que nosso leitor precisava, mas podemos pensar em algo mais genérico, se necessário! Usando SQL Dinâmico, passando nome do campo a ser multiplicado e nome da tabela! Fica a sugestão!</p>
<p>Agradecendo ao nosso leitor Rodrigo Vieira pela solicitação!!</p>
<p>Grande abraço, espero que gostem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diaadiaoracle.com.br/2010/04/08/funcao-de-grupo-para-multiplicar-sum-mult/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guida de referência de SQL Básico</title>
		<link>http://www.diaadiaoracle.com.br/2010/03/08/guida-de-referencia-de-sql-basico/</link>
		<comments>http://www.diaadiaoracle.com.br/2010/03/08/guida-de-referencia-de-sql-basico/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 20:01:49 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[aula oracle]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[curso oracle]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[distinct]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[oracle 10g]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[basico]]></category>
		<category><![CDATA[comando sql]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=74</guid>
		<description><![CDATA[Fala pessoAll,
Com a contribuição do nosso amigo e leitor Robson Cristovão, está aí um guia básico de SQL que pode ser bastante útil para quem está começando no mundo SQL e tem algumas dúvidas quanto ao uso e sitaxe de alguns comandos SQL! Fica a dica! 
AND &#124; OR:
	SELECT nome_coluna(s)
	FROM    nome_tabela
	WHERE condiçao
	AND [...]]]></description>
			<content:encoded><![CDATA[<p>Fala pessoAll,</p>
<p>Com a contribuição do nosso amigo e leitor <strong>Robson Cristovão</strong>, está aí um guia básico de SQL que pode ser bastante útil para quem está começando no mundo SQL e tem algumas dúvidas quanto ao uso e sitaxe de alguns comandos SQL! Fica a dica! </p>
<p><code>AND | OR:<br />
	SELECT nome_coluna(s)<br />
	FROM    nome_tabela<br />
	WHERE condiçao<br />
	AND | OR condiçao<br />
</code></p>
<p><code>ALTER TABLE (add coluna):<br />
	ALTER TABLE nome_tabela<br />
	ADD nome_coluna datatype<br />
</code></p>
<p><code>ALTER TABLE (drop column):<br />
	ALTER TABLE nome_tabela<br />
	DROP COLUMN nome_coluna<br />
</code></p>
<p><code>AS (alias for column):<br />
	SELECT nome_coluna AS coluna_apelido<br />
	FROM nome_tabela<br />
</code></p>
<p><code>AS (alias for table):<br />
	SELECT nome_coluna<br />
	FROM nome_tabela  AS tabela_apelido<br />
</code></p>
<p><code>BETWEEN:<br />
	SELECT nome_coluna(s)<br />
	FROM nome_tabela<br />
	WHERE nome_coluna<br />
	BETWEEN valor1 AND valor2<br />
</code></p>
<p><code>CREATE (database):<br />
	CREATE DATABASE nome_base_de_dados<br />
</code></p>
<p><code>CREATE (index):<br />
	CREATE INDEX nome_indice<br />
	ON nome_tabela (nome_coluna)<br />
</code></p>
<p><code>CREATE (table):<br />
	CREATE TABLE nome_tabela(<br />
	nome_coluna1 tipo_dado,<br />
	nome_coluna2 tipo_dado,...)<br />
</code></p>
<p><code>CREATE (unique index):<br />
	CREATE UNIQUE INDEX nome_indice<br />
	ON nome_tabela (nome_coluna)<br />
</code></p>
<p><code>CREATE (view):<br />
	CREATE VIEW nome_da_view AS<br />
	SELECT nome_coluna(s)<br />
	FROM nome_tabela<br />
	WHERE condiçao<br />
</code></p>
<p><code>DELETE:<br />
	DELETE FROM nome_tabela<br />
OU<br />
	DELETE FROM nome_tabela<br />
	WHERE condiçao<br />
</code></p>
<p><code>DROP (database):<br />
	DROP DATABASE nome_base_de_dados<br />
</code></p>
<p><code>DROP (index):<br />
	DROP INDEX nome_tabela.nome_indice<br />
</code></p>
<p><code>DROP (table):<br />
	DROP TABLE nome_tabela<br />
</code></p>
<p><code>GROUP BY:<br />
	SELECT nome_coluna1,SUM(nome_coluna2)<br />
	FROM nome_tabela<br />
	GROUP BY nome_coluna1<br />
</code></p>
<p><code>HAVING:<br />
	SELECT nome_coluna1,SUM(nome_coluna2)<br />
	FROM nome_tabela<br />
	GROUP BY nome_coluna1<br />
	HAVING SUM(nome_coluna2) valor_da_condiçao<br />
</code></p>
<p><code>IN:<br />
	SELECT nome_coluna(s)<br />
	FROM nome_tabela<br />
	WHERE nome_coluna<br />
	IN (valor1,valor2,..)<br />
</code></p>
<p><code>INSERT:<br />
	INSERT INTO nome_tabela<br />
	VALUES (valor1, valor2,....)<br />
OU<br />
	INSERT INTO nome_tabela<br />
	(nome_coluna1, nome_coluna2,...)<br />
	VALUES (valor1, valor2,....)<br />
</code></p>
<p><code>LIKE:<br />
	SELECT nome_coluna(s)<br />
	FROM nome_tabela<br />
	WHERE nome_coluna<br />
	LIKE padrao<br />
</code></p>
<p><code>ORDER BY:<br />
	SELECT nome_coluna(s)<br />
	FROM nome_tabela<br />
	ORDER BY nome_coluna [ASC | DESC<br />
</code></p>
<p><code>SELECT:<br />
	SELECT nome_coluna(s)<br />
	FROM nome_tabela<br />
</code></p>
<p><code>SELECT (all):<br />
	SELECT * FROM nome_tabela<br />
</code></p>
<p><code>SELECT (distinct):<br />
	SELECT DISTINCT nome_coluna(s)<br />
	FROM nome_tabela<br />
</code></p>
<p><code>SELECT (into - usado para criar cópias auxiliares das tabelas):<br />
	SELECT * INTO new_nome_tabela<br />
	FROM original_nome_tabela<br />
OU<br />
	SELECT nome_coluna(s)<br />
	INTO new_nome_tabela<br />
	FROM original_nome_tabela<br />
</code></p>
<p><code>TRUNCATE:<br />
	TRUNCATE TABLE nome_tabela<br />
</code></p>
<p><code>UPDATE:<br />
	UPDATE nome_tabela<br />
	SET nome_coluna=novo_valor<br />
	[, nome_coluna=novo_valor]<br />
	WHERE nome_coluna = algum_valor<br />
</code></p>
<p><code>WHERE:<br />
	SELECT nome_coluna(s)<br />
	FROM nome_tabela<br />
	WHERE condiçao<br />
</code></p>
<p>Espero que gostem.</p>
<p>Atc.<br />
Gerson Júnior<br />
gerson.vasconcelos@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diaadiaoracle.com.br/2010/03/08/guida-de-referencia-de-sql-basico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dica: Como descobrir quem referencia uma coluna?</title>
		<link>http://www.diaadiaoracle.com.br/2010/02/11/dica-como-descobrir-quem-referencia-uma-coluna/</link>
		<comments>http://www.diaadiaoracle.com.br/2010/02/11/dica-como-descobrir-quem-referencia-uma-coluna/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 14:46:26 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[distinct]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[pl/sql]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[foreign key]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=72</guid>
		<description><![CDATA[Fala PessoAll,
A dica de hoje é a respeito do seguinte&#8230;
Muitas vezes temos a necessidade de fazer algumas alterações nas nossas tabelas, nosso modelo, etc. E aí precisamos levantar quais tabelas recerenciam uma determinada tabela ou coluna, quais as filhas dessas colunas, quais as foreign key que fazem referência a elas e etc.
Aí, podemos usar o [...]]]></description>
			<content:encoded><![CDATA[<p>Fala PessoAll,</p>
<p>A dica de hoje é a respeito do seguinte&#8230;</p>
<p>Muitas vezes temos a necessidade de fazer algumas alterações nas nossas tabelas, nosso modelo, etc. E aí precisamos levantar quais tabelas recerenciam uma determinada tabela ou coluna, quais as filhas dessas colunas, quais as <b>foreign key</b> que fazem referência a elas e etc.</p>
<p>Aí, podemos usar o seguinte <b>select</b>:</p>
<p><code><br />
select distinct c.table_name<br />
  from dba_constraints  c,<br />
       dba_cons_columns cc<br />
 where c.constraint_type = 'R'<br />
   and cc.owner           = c.owner<br />
   and cc.constraint_name = c.r_constraint_name<br />
   and cc.owner           = &#038;SCHEMA<br />
   and cc.table_name      = &#038;TABELA<br />
   and cc.column_name     = &#038;COLUNA<br />
</code></p>
<p>Claro que temos que mudar os parâmetros &#038;SCHEMA, &#038;TABELA e &#038;COLUNA, para recuperar as tabelas que são filhas da tabela que você deseja.</p>
<p>Exemplo fica melhor não? Vamos lá:</p>
<p>Eu preciso descobrir quais as tabelas que fazem referência a alguma coluna da tabela <code>SOURCE</code>, para tal fazemos o seguinte <b>select</b>:</p>
<p><code><br />
SQL> select DISTINCT C.TABLE_NAME<br />
  2    from dba_constraints  c,<br />
  3         dba_cons_columns cc<br />
  4   where c.constraint_type = 'R'<br />
  5     and cc.owner           = c.owner<br />
  6     and cc.constraint_name = c.r_constraint_name<br />
  7     and cc.owner           = 'ORABUGIT'<br />
  8     and cc.table_name      = 'SOURCES'<br />
  9  /<br />
TABLE_NAME<br />
------------------------------<br />
PEOPLE_EQUIPS<br />
</code></p>
<p>Como podemos ver, obtemos como resposta a tabela <code>PEOPLE_EQUIPS</code>, portanto podemos ver que nesta tabela tem alguma coluna que referencia através de <b>foreign key</b> uma coluna da tabela <code>SOURCE</code>.</p>
<p>Espero que a dica seja útil!!</p>
<p>Abraços.</p>
<p>Atc.<br />
Gerson Júnior<br />
gerson.vasconcelos@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diaadiaoracle.com.br/2010/02/11/dica-como-descobrir-quem-referencia-uma-coluna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Potência / Expoentes em SQL e PL/SQL &#8211; Oracle</title>
		<link>http://www.diaadiaoracle.com.br/2010/02/08/potencia-expoentes-em-sql-e-plsql-oracle/</link>
		<comments>http://www.diaadiaoracle.com.br/2010/02/08/potencia-expoentes-em-sql-e-plsql-oracle/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 17:08:32 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[oracle 10g]]></category>
		<category><![CDATA[pl/sql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[dica sql]]></category>
		<category><![CDATA[expoente]]></category>
		<category><![CDATA[potencia]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=69</guid>
		<description><![CDATA[Fala Pessoal,
Hoje vai mais uma dica  de SQL e PL/SQL.
Até o dia de hoje, eu nunca tinha necessitado usar expoente no SQL / PL/SQL, nunca tinha pego nenhum problema em desenvolvimento que precisasse ser usado potência, expoente e tal. 
Porém, hoje uma amiga desenvolvedora, Leilah, precisou dessa funcionalidade e aí discutimos um pouco sobre [...]]]></description>
			<content:encoded><![CDATA[<p>Fala Pessoal,</p>
<p>Hoje vai mais uma dica  de SQL e PL/SQL.</p>
<p>Até o dia de hoje, eu nunca tinha necessitado usar expoente no SQL / PL/SQL, nunca tinha pego nenhum problema em desenvolvimento que precisasse ser usado potência, expoente e tal. </p>
<p>Porém, hoje uma amiga desenvolvedora, Leilah, precisou dessa funcionalidade e aí discutimos um pouco sobre o assunto. Descobri portanto, que no Oracle, não precisamos fazer muita conta e nem usar sintaxes esquisitas para usar potência e elevar um número a uma determinada potência, basta usarmos a função <b>POWER</b>, isso mesmo, funciona assim:</p>
<p>Exemplo SQL:<br />
<code><br />
SQL> select power(2,3) from dual;<br />
POWER(2,3)<br />
----------<br />
         8<br />
</code><br />
Neste exemplo, temos 2 elevado a 3, que nos dá 8 como resultado&#8230;</p>
<p>Exemplo PL/SQL:<br />
<code><br />
SQL> declare<br />
  2     v_num number;<br />
  3  begin<br />
  4     v_num := power(2,3);<br />
  5     dbms_output.put_line('O numero 2 elevado a 3 é: '||to_char(v_num));<br />
  6  end;<br />
  7  /<br />
O numero 2 elevado a 3 é: 8<br />
Procedimento PL/SQL concluÝdo com sucesso.<br />
</code></p>
<p>Pronto pessoal, fica aí a dica de utilização de potência em PL/SQL.</p>
<p>Espero que gostem.</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/2010/02/08/potencia-expoentes-em-sql-e-plsql-oracle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dica de SQL &#8211; Primeiro sábado do mês seguinte</title>
		<link>http://www.diaadiaoracle.com.br/2010/02/01/dica-de-sql-primeiro-sabado-do-mes-seguinte/</link>
		<comments>http://www.diaadiaoracle.com.br/2010/02/01/dica-de-sql-primeiro-sabado-do-mes-seguinte/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 17:21:14 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[automatizar tarefas.]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[pl/sql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[dica sql]]></category>
		<category><![CDATA[recupera primeiro sabado]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=65</guid>
		<description><![CDATA[Fala PessoAll,
Recebi um email do amigo Vitor Ugo sobre uma solicitação que ele havia recebido para criação de um Job. 
Até aí moleza, como podemos ver no post: Job no Oracle criar um Job é fácil! Só que este Job tem uma particularidade, ele deve rodar apenas no primeiro sábado de cada mês.
Com isso, fiz [...]]]></description>
			<content:encoded><![CDATA[<p>Fala PessoAll,</p>
<p>Recebi um email do amigo Vitor Ugo sobre uma solicitação que ele havia recebido para criação de um Job. </p>
<p>Até aí moleza, como podemos ver no post: <a href="http://www.diaadiaoracle.com.br/2009/06/10/job-no-oracle/" target="top">Job no Oracle</a> criar um Job é fácil! Só que este Job tem uma particularidade, ele deve rodar apenas no primeiro sábado de cada mês.</p>
<p>Com isso, fiz a dica para Vitor, dele colocar o job para executar todo dia, e antes de chamar a procedure do job fazer um teste e identificar se era o primeiro sábado, se sim, beleza roda a procedure, senão, não faz nada! Funcionaria, porém não é uma solução das mais bonitas, porque mesmo sem fazer nada, o job executaria todos os dias.</p>
<p>Foi então que o Vitor desenvolveu um select, que recupera o primeiro sábado do mês seguinte, e resolveu todos os problemas.</p>
<p>Segue o select desenvolvido por Vitor:</p>
<p><code><br />
select LEAST(NEXT_DAY(ADD_MONTHS(trunc(sysdate,'MM')+(8/24),1)-1,7),<br />
             next_day(ADD_MONTHS(trunc(sysdate,'MM')+(8/24),1),7)) from dual;<br />
</code></p>
<p>Neste select o &#8220;7&#8243; indica que é um sábado, caso desejem outro dia da semana, basta que vocês alterem esse número para o dia desejado!</p>
<p>É isso, fica aí a dica. Espero que gostem</p>
<p>Abraço a todos.</p>
<p>Atc.<br />
Gerson Júnior<br />
gerson.vasconcelos@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diaadiaoracle.com.br/2010/02/01/dica-de-sql-primeiro-sabado-do-mes-seguinte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<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 Stored Prodecure [...]]]></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>3</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 é o DECODE, essa função [...]]]></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>7</slash:comments>
		</item>
		<item>
		<title>Oracle Execute Immediate SQL Dinâmico</title>
		<link>http://www.diaadiaoracle.com.br/2009/04/28/oracle-execute-immediate-sql-dinamico/</link>
		<comments>http://www.diaadiaoracle.com.br/2009/04/28/oracle-execute-immediate-sql-dinamico/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 02:05:00 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[dinamico]]></category>
		<category><![CDATA[execute immediate]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=8</guid>
		<description><![CDATA[Fala pessoAll,
Vamos nós novamente.
A pedido do amigo Marcos Castro dessa vez estaremos falando sobre SQL Dinâmicos, um recurso muito interessante no PL/SQL que em diversas vezes não é utilizado por nossos excelentíssimos desenvolvedores, fazendo com que nossos códigos sejam bem maiores, bem mais complexos e bem mais chatos de dar manutenção. Mas&#8230; o lado B [...]]]></description>
			<content:encoded><![CDATA[<p>Fala pessoAll,</p>
<p>Vamos nós novamente.<br />
A pedido do amigo Marcos Castro dessa vez estaremos falando sobre SQL Dinâmicos, um recurso muito interessante no PL/SQL que em diversas vezes não é utilizado por nossos excelentíssimos desenvolvedores, fazendo com que nossos códigos sejam bem maiores, bem mais complexos e bem mais chatos de dar manutenção. Mas&#8230; o lado B dessa história é: Se você complicar muito no uso de SQL Dinâmico, não tenha dúvida de que seu código vai ficar muito complexo e todo mundo que for dar manutenção vai te xingar um bocado! Rsrs.</p>
<p>Vamos lá, ao exemplo prático e simples, que é o que interessa.</p>
<p>Suponha que você tem uma função para ser feita, que deve retornar o nome de uma determinada pessoa&#8230; essa pesquisa pode ser pelo seu RG, CPF ou Habilitação. Como podemos fazer isso?</p>
<p>Exemplo 1 (sem SQL Dinâmico):</p>
<p>create or replace function pesquisa_pessoa(pcodigo number, pfiltro varchar2) return varchar2 is<br />
   v_nome_pessoa pessoas.nome%type;<br />
begin<br />
   if(pfiltro = &#8216;RG&#8217;) then<br />
      select nome<br />
         into v_nome_pessoa<br />
        from pessoas<br />
      where rg = pcodigo;<br />
   elsif(pfiltro = &#8216;CPF&#8217;) then<br />
      select nome<br />
         into v_nome_pessoa<br />
        from pessoas<br />
      where cpf = pcodigo;<br />
   elsif(pfiltro = &#8216;CNH&#8217;) then<br />
      select nome<br />
         into v_nome_pessoa<br />
        from pessoas<br />
      where cnh = pcodigo;<br />
   end if;</p>
<p>   return v_nome_pessoa;<br />
end;</p>
<p>Notemos que o SQL é o mesmo sempre (select nome into v_nome_pessoa from pessoas where &#8230; = pcodigo ), o que muda é apenas o nome do campo que será utilizado para filtrar a pessoa, portanto, podemos utilizar o recurso de SQL Dinâmico para otimizar este código, e como ele ficaria? Assim:</p>
<p>create or replace function pesquisa_pessoa(pcodigo number, pfiltro varchar2) return varchar2 is<br />
v_nome_pessoa pessoas.nome%type;<br />
v_where varchar2(50);<br />
begin<br />
if(pfiltro = &#8216;RG&#8217;) then<br />
v_where := &#8216;rg&#8217;;<br />
elsif(pfiltro = &#8216;CPF&#8217;) then<br />
v_where := &#8216;cpf&#8217;;<br />
elsif(pfiltro = &#8216;CNH&#8217;) then<br />
v_where := &#8216;cnh&#8217;;<br />
end if;</p>
<p>dbms_output.put_line(&#8217;select nome into v_nome_pessoa from pessoas where &#8216;||v_where||&#8217; = &#8216;||pcodigo||&#8217;;');</p>
<p>execute immediate &#8217;select nome from pessoas where &#8216;||v_where||&#8217; = &#8216;||pcodigo<br />
into v_nome_pessoa;</p>
<p>return v_nome_pessoa;<br />
end;</p>
<p>Bem mais simples, e não precisamos ficar repetindo o mesmo comando várias vezes.</p>
<p>Bom, isso é só um exemplo bem simples, mas&#8230; o Execute Immediate pode ser usado de diversas outras maneiras.</p>
<p>Achei um site bem interessante, que mostra as diversas usabilidades deste recurso com exemplos que podem ser utilizados para um melhor entendimento. O site é o DBA Support.</p>
<p>É isso aí, espero que este recurso seja útil e bem utilizado nas suas aplicações.</p>
<p>Atc.</p>
<p>Gerson Júnior</p>
<p>(gerson.vasconcelos@gmail.com)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diaadiaoracle.com.br/2009/04/28/oracle-execute-immediate-sql-dinamico/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
