<?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>glufke.net &#187; Coluna Virtual</title>
	<atom:link href="http://glufke.net/tag/coluna-virtual/feed/" rel="self" type="application/rss+xml" />
	<link>http://glufke.net</link>
	<description></description>
	<lastBuildDate>Wed, 30 Nov 2011 17:41:41 +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>Colunas Virtuais no 11g &#8211; Parte 2</title>
		<link>http://glufke.net/2009/08/17/colunas-virtuais-no-11g-parte-2/</link>
		<comments>http://glufke.net/2009/08/17/colunas-virtuais-no-11g-parte-2/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 02:43:22 +0000</pubDate>
		<dc:creator>glufke</dc:creator>
				<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[Coluna Virtual]]></category>
		<category><![CDATA[Oracle 11g]]></category>

		<guid isPermaLink="false">http://glufke.net/?p=101</guid>
		<description><![CDATA[Colunas Virtuais no 11g &#8211; Parte 2 &#8211; Índices e Constraints
Continuando o artigo sobre colunas virtuais no Oracle 11g, veremos outras possibilidades do uso dessa feature.
Se tentarmos inserir dados que resultem em uma coluna virtual duplicada, podemos esperar uma violação de Unique Constraint:
SQL> INSERT INTO t (n1, n2) VALUES (10, 20);
INSERT INTO t (n1, n2) [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Colunas Virtuais no 11g &#8211; Parte 2 &#8211; Índices e Constraints</strong></p>
<p>Continuando o artigo sobre colunas virtuais no Oracle 11g, veremos outras possibilidades do uso dessa feature.</p>
<p>Se tentarmos inserir dados que resultem em uma coluna virtual duplicada, podemos esperar uma violação de Unique Constraint:<span id="more-101"></span></p>
<pre class="brush: sql;">SQL> INSERT INTO t (n1, n2) VALUES (10, 20);
INSERT INTO t (n1, n2) VALUES (10, 20)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.T_PK) violated</pre>
<p>Como vimos, gerou o exception ORA-00001.</p>
<div id="ads_336x280"><script type="text/javascript"><!--
google_ad_client = "pub-8964513116661040";
google_alternate_color = "ffffFF";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
//2007-09-07: wp_quadrado_gra
google_ad_channel = "0247072216";
google_color_border = "FFFFFF";
google_color_bg = "FFFFff";
google_color_link = "4F82CB";
google_color_text = "000000";
google_color_url = "4F82CB";
//-->
</script><script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p>Em seguida, veremos que, como podemos criar uma chave primária em uma coluna virtual, também podemos referenciá-la a uma constraint Foreign Key. No próximo exemplo, vamos criar uma tabela filha com uma foreign key para a coluna virtual N3.</p>
<pre class="brush: sql;">SQL> CREATE TABLE t_child
  2  ( n3 INT
  3  , CONSTRAINT tc_fk
  4       FOREIGN KEY  (n3)
  5       REFERENCES  t(n3)
  6  );

Table created.</pre>
<p>Iremos agora inserir alguns valores válidos e inválidos:</p>
<pre class="brush: sql;">SQL> INSERT INTO t_child VALUES (30);

1 row created.

SQL> INSERT INTO t_child VALUES (40);
INSERT INTO t_child VALUES (40)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.TC_FK) violated - parent key not found</pre>
<p><a href="http://glufke.net/2009/07/31/colunas-virtuais-no-oracle-11g/">Colunas Virtuais no 11g &#8211; Parte 1 &#8211; Introdução</a><br />
Colunas Virtuais no 11g &#8211; Parte 2 &#8211; Índices e Constraints</p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2009/08/17/colunas-virtuais-no-11g-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Colunas Virtuais no 11g &#8211; Parte 1</title>
		<link>http://glufke.net/2009/07/31/colunas-virtuais-no-oracle-11g/</link>
		<comments>http://glufke.net/2009/07/31/colunas-virtuais-no-oracle-11g/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 19:54:06 +0000</pubDate>
		<dc:creator>glufke</dc:creator>
				<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[Coluna Virtual]]></category>
		<category><![CDATA[Oracle 11g]]></category>

		<guid isPermaLink="false">http://glufke.net/?p=99</guid>
		<description><![CDATA[Oracle suportou expressões armazenadas por muitos anos, em views e índices baseados em função. Mais principalmente, são as views que nos permitem armazenar e modularisar expressões calculadas baseados em outras colunas da tabela. 
Em versões mais recentes (a partir do 8i), temos como indexar as colunas baseados em função. (Function based indexes). Agora, a partir [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle suportou expressões armazenadas por muitos anos, em views e índices baseados em função. Mais principalmente, são as views que nos permitem armazenar e modularisar expressões calculadas baseados em outras colunas da tabela. </p>
<p>Em versões mais recentes (a partir do 8i), temos como indexar as colunas baseados em função. (Function based indexes). Agora, a partir da versão 11g, o banco Oracle nos permite também armazenar expressões diretamente nas tabelas como colunas virtuais.</p>
<p>Como veremos neste artigo, colunas virtuais são mais flexíveis que as outras alternativas citadas. Vamos examinar seu uso básico e também considerar alguns outros aspectos dessa nova feature.<span id="more-99"></span></p>
<p><strong>CRIANDO UMA COLUNA VIRTUAL</strong></p>
<div id="ads_336x280"><script type="text/javascript"><!--
google_ad_client = "pub-8964513116661040";
google_alternate_color = "ffffFF";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
//2007-09-07: wp_quadrado_gra
google_ad_channel = "0247072216";
google_color_border = "FFFFFF";
google_color_bg = "FFFFff";
google_color_link = "4F82CB";
google_color_text = "000000";
google_color_url = "4F82CB";
//-->
</script><script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p>Começaremos criando uma simples tabela com uma única coluna virtual</p>
<pre class="brush: sql;">SQL> CREATE TABLE t
  2  ( n1 INT
  3  , n2 INT
  4  , n3 INT GENERATED ALWAYS AS (n1 + n2) VIRTUAL
  5  );

Table created.</pre>
<p>Vemos que uma coluna virtual é gerada de uma simples expressão envolvendo as outras colunas da tabela. A palavra chave VIRTUAL é opcional. Foi incluída pelo que a Oracle chama da &#8220;Clareza sintática&#8221;.</p>
<p>Colunas virutais não são armazenadas em disco. Elas são geradas em tempo de execução usando as expressões associadas (em nosso exemplo, N1 + N2). Existe algumas implicações na forma de inserir dados em tabelas que usam colunas virtuais:</p>
<pre class="brush: sql;">SQL> INSERT INTO t VALUES (10, 20, 30);
INSERT INTO t VALUES (10, 20, 30)
            *
ERROR at line 1:
ORA-54013: INSERT operation disallowed on virtual columns</pre>
<p>Outra forma que não pode ser feita:</p>
<pre class="brush: sql;">SQL> INSERT INTO t VALUES (10, 20);
INSERT INTO t VALUES (10, 20)
            *
ERROR at line 1:
ORA-00947: not enough values</pre>
<p>Tirando o fato que não podemos inserir ou alterar as colunas virtuais, elas ainda assim são consideradas parte da lista de colunas. Isso significa portanto, que precisamos referenciar as colunas físicas explicitamente nos comandos INSERT, como abaixo:</p>
<pre class="brush: sql;">SQL> INSERT INTO t (n1, n2) VALUES (10, 20);

1 row created.</pre>
<p>É claro que a prática acima já faz parte das melhores práticas que todo dsenevolvedor deve ter. Agora que temos dados dentro do nosso exemplo, podemos consultar a coluna virtual:</p>
<pre class="brush: sql;">SQL> SELECT * FROM t;

        N1         N2         N3
---------- ---------- ----------
        10         20         30

1 row selected.</pre>
<p>Nossa expressão é montada em tempo de execução e nos dá a saída acima!</p>
<p>Colunas Virtuais no 11g &#8211; Parte 1 &#8211; Introdução<br />
<a href="http://glufke.net/2009/08/17/colunas-virtuais-no-11g-parte-2/">Colunas Virtuais no 11g &#8211; Parte 2 &#8211; Índices e Constraints</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2009/07/31/colunas-virtuais-no-oracle-11g/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

