<?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; select</title>
	<atom:link href="http://www.diaadiaoracle.com.br/category/select/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 &#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>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 [...]]]></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í, [...]]]></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>2</slash:comments>
		</item>
		<item>
		<title>Union x Union ALL &#8212; Select&#8217;s no Oracle</title>
		<link>http://www.diaadiaoracle.com.br/2009/04/16/union-x-union-all-selects-no-oracle/</link>
		<comments>http://www.diaadiaoracle.com.br/2009/04/16/union-x-union-all-selects-no-oracle/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 16:46:00 +0000</pubDate>
		<dc:creator>oracle</dc:creator>
				<category><![CDATA[distinct]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[union]]></category>
		<category><![CDATA[union all]]></category>

		<guid isPermaLink="false">http://www.diaadiaoracle.com.br/?p=7</guid>
		<description><![CDATA[Fala PessoAll, Vamos com mais uma dica interessante sobre Oracle. Vamos analisar desta vez, os comandos UNION e UNION ALL. Estes comandos servem para que possamos unir mais de uma query (select) em um mesmo comando, trazendo os resultados de ambas as query&#8217;s. Que? Entendeu nada!? Vamos lá: Existe no Oracle a possibilidade de unirmos [...]]]></description>
			<content:encoded><![CDATA[<p>Fala PessoAll,</p>
<p>Vamos com mais uma dica interessante sobre Oracle.<br />
Vamos analisar desta vez, os comandos <code>UNION</code> e <code>UNION ALL</code>. Estes comandos servem para que possamos unir mais de uma query (select) em um mesmo comando, trazendo os resultados de ambas as query&#8217;s. Que? Entendeu nada!? Vamos lá:</p>
<p>Existe no Oracle a possibilidade de unirmos mais de um comando select de forma que possamos obter o resultados de todos eles unidos (claro!) em um único resultado, como se fosse um comando só, como assim?</p>
<p>Suponha que você possui uma tabela de clientes e uma tabela de funcionários, e você quer trazer todos os códigos e nomes de clientes e funcionários para exibir em um relatório? Como fazer isso? Assim:</p>
<p><code><br />
Select codcli,<br />
nom_cli,<br />
'C' tipo<br />
from clientes<br />
union<br />
Select cod_func,<br />
nom_func,<br />
'F'<br />
from funcionarios;<br />
</code></p>
<p>Se vocês executarem este comando, teremos todos os clientes e todos os funcionários listados em um mesmo resultado, mas&#8230; temos algumas coisas a considerar.</p>
<p>1 &#8211; Vocês devem ter notado que os nomes das colunas das tabelas são diferentes, quando eu rodar que nome minha coluna vai ter? O nome das colunas da primeira query da lista de comandos, a primeira query vai mandar em tudo e as colunas do resultado vão receber o nome das colunas da primeira query.</p>
<p>2 &#8211; Quando usamos o comando <code>UNION</code>, temos obrigatóriamente que ter a mesma quantidade de colunas e o mesmo tipo de dados das colunas em todas as query&#8217;s. Como assim? Suponha que na tabela <code>clientes</code> a coluna <code>cod_cli</code> tenha tipo de dados <code>number</code> e na tabela <code>funcionarios</code> a coluna <code>cod_func</code> tenha tipo de dados <code>varchar2</code>, não pode! Ao executar este comando o banco vai retornar um erro dizendo que as colunas das query&#8217;s não estão corretamente relacionadas. Como em ambos os comandos elas são a primeira coluna da query e estarão relacionadas, ambas tem que ter o mesmo tipo.</p>
<p>3 &#8211; Não podemos utilizar <code>ORDER BY</code> nas query&#8217;s envolvidas, apenas na última query, que ordernará os registros de todas as query&#8217;s. Neste caso acima, por exemplo, se na ultima query colocássemos um <code>ORDER BY 1</code> por exemplo, ele ordenaria o resultado das duas query&#8217;s juntas, como se fosse um comando só. Se tiver códigos iguais nas duas query&#8217;s, serão trazidos juntos, pois os resultados serão considerados juntos na hora de ordenar.</p>
<p>Outra coisa que comentei no início foi o <code>UNION ALL</code>, qual a diferença dele pro <code>UNION</code>? O <code>UNION</code> utilizado sozinho faz um <code>distinct</code> no resultado da query, ou seja, se tiverem resultados repitidos eles não serão exibidos, será exibida apenas uma ocorrência. Suponha que por coincidência tenhamos um cliente com código 1 e nome CICERO e tenhamos um funcionario com código 1 e nome CICERO também, caso não tivéssemos essa coluna tipo para diferenciar os registros de clientes e funcionários teríamos a ocorrência 1 CICERO apenas uma vez em nosso resultado. Já usando o <code>UNION ALL</code>, independente da quantidade de registros repetidos que sejam retornados, todos serão exibidos.</p>
<p>Como usa? Assim:</p>
<p><code><br />
Select codcli,<br />
nom_cli,<br />
'C' tipo<br />
from clientes<br />
union all<br />
Select cod_func,<br />
nom_func,<br />
'F'<br />
from funcionarios;<br />
</code></p>
<p>Qual a diferença? Só o <code>all</code> depois do <code>union</code>, depois disso o resto o Oracle resolve. Espero esse tal de Oracle!!</p>
<p>Momento DBA: Para o banco, por não precisar se preocupar em verificar se existem resultados iguais para que exiba apenas um deles, o <code>UNION ALL</code> tem bem menos custo para ser executado, portanto, se você tiver query&#8217;s em que você tem certeza que não serão retornados valores repetidos (como essa do exemplo, em que temos uma coluna <code>tipo</code> para diferenciar) use sempre <code>UNION ALL</code>, seu DBA e seu Banco de Dados agradecem!</p>
<p>É isso pessoal, espero que tenham entendido e que gostem.<br />
Qualquer dúvida, sugestão, reclamação etc não deixem de 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/2009/04/16/union-x-union-all-selects-no-oracle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

