<?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"
	>

<channel>
	<title>glufke.net</title>
	<atom:link href="http://glufke.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://glufke.net</link>
	<description>Sua fonte de informação sobre Oracle no Brasil</description>
	<pubDate>Fri, 12 Oct 2007 01:21:53 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Select que retorna os Números Primos</title>
		<link>http://glufke.net/2007/10/11/select-que-retorna-os-numeros-primos/</link>
		<comments>http://glufke.net/2007/10/11/select-que-retorna-os-numeros-primos/#comments</comments>
		<pubDate>Thu, 11 Oct 2007 22:40:31 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[Curiosidades]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/10/11/select-que-retorna-os-numeros-primos/</guid>
		<description><![CDATA[Esse post vai mais a título de curiosidade. Sabemos que os números primos são números naturais que podem ser divididos apenas por dois números naturais, o 1 (um) e ele mesmo. Pois a tempos que eu queria um SQL que retornasse esses números! 
Após um pouco de tentativas, saiu o SQL abaixo:
SELECT z.zz PRIMOS
FROM
&#160;&#40;SELECT rownum+1 [...]]]></description>
			<content:encoded><![CDATA[<p>Esse post vai mais a título de curiosidade. Sabemos que os <a href="http://pt.wikipedia.org/wiki/N%C3%BAmero_primo">números primos</a> são números naturais que podem ser divididos apenas por dois números naturais, o 1 (um) e ele mesmo. Pois a tempos que eu queria um SQL que retornasse esses números! <span id="more-20"></span></p>
<p>Após um pouco de tentativas, saiu o SQL abaixo:</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;"><span class="kw1">SELECT</span> z.zz PRIMOS<br />
<span class="kw1">FROM</span><br />
&nbsp;<span class="br0">&#40;</span><span class="kw1">SELECT</span> rownum<span class="nu0">+1</span> zz<br />
&nbsp; <span class="kw1">FROM</span> user_tables<br />
&nbsp; <span class="kw1">WHERE</span> rownum &lt; <span class="nu0">100</span><br />
&nbsp;<span class="br0">&#41;</span> z<br />
<span class="kw1">WHERE</span> zz <span class="kw1">NOT</span> <span class="kw1">IN</span> <span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">SELECT</span> y.bb<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">FROM</span> <span class="br0">&#40;</span><span class="kw1">SELECT</span> rownum<span class="nu0">+1</span> aa <span class="kw1">FROM</span> user_tables a <span class="kw1">WHERE</span> rownum &lt; <span class="nu0">100</span><span class="br0">&#41;</span> x<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ,&nbsp; &nbsp; <span class="br0">&#40;</span><span class="kw1">SELECT</span> rownum<span class="nu0">+1</span> bb <span class="kw1">FROM</span> user_tables b <span class="kw1">WHERE</span> rownum &lt; <span class="nu0">100</span><span class="br0">&#41;</span> y<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">WHERE</span> bb&lt;&gt;aa<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AND</span> mod<span class="br0">&#40;</span>bb, aa<span class="br0">&#41;</span>=<span class="nu0">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AND</span> aa&lt;=bb<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
/</div></div>
<p><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><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Abaixo, colocaremos uma amostra dos resultados:</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">SELECT</span> z.zz PRIMOS<br />
&nbsp; <span class="nu0">2</span>&nbsp; <span class="kw1">FROM</span><br />
&nbsp; <span class="nu0">3</span>&nbsp; &nbsp;<span class="br0">&#40;</span><span class="kw1">SELECT</span> rownum<span class="nu0">+1</span> zz<br />
&nbsp; <span class="nu0">4</span>&nbsp; &nbsp; <span class="kw1">FROM</span> user_tables<br />
&nbsp; <span class="nu0">5</span>&nbsp; &nbsp; <span class="kw1">WHERE</span> rownum &lt; <span class="nu0">100</span><br />
&nbsp; <span class="nu0">6</span>&nbsp; &nbsp;<span class="br0">&#41;</span> z<br />
&nbsp; <span class="nu0">7</span>&nbsp; <span class="kw1">WHERE</span> zz <span class="kw1">NOT</span> <span class="kw1">IN</span> <span class="br0">&#40;</span><br />
&nbsp; <span class="nu0">8</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">SELECT</span> y.bb<br />
&nbsp; <span class="nu0">9</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">FROM</span> <span class="br0">&#40;</span><span class="kw1">SELECT</span> rownum<span class="nu0">+1</span> aa <span class="kw1">FROM</span> user_tables a <span class="kw1">WHERE</span> rownum &lt; <span class="nu0">100</span><span class="br0">&#41;</span> x<br />
&nbsp;<span class="nu0">10</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ,&nbsp; &nbsp; <span class="br0">&#40;</span><span class="kw1">SELECT</span> rownum<span class="nu0">+1</span> bb <span class="kw1">FROM</span> user_tables b <span class="kw1">WHERE</span> rownum &lt; <span class="nu0">100</span><span class="br0">&#41;</span> y<br />
&nbsp;<span class="nu0">11</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">WHERE</span> bb&lt;&gt;aa<br />
&nbsp;<span class="nu0">12</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AND</span> mod<span class="br0">&#40;</span>bb, aa<span class="br0">&#41;</span>=<span class="nu0">0</span><br />
&nbsp;<span class="nu0">13</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AND</span> aa&lt;=bb<br />
&nbsp;<span class="nu0">14</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp;<span class="nu0">15</span>&nbsp; /<br />
<br />
&nbsp; &nbsp;PRIMOS<br />
<span class="co1">---------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">3</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">5</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">7</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">11</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">13</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">17</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">19</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">23</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">29</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">31</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">37</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">41</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">43</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">47</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">53</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">59</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">61</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">67</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">71</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">73</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">79</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">83</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">89</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">97</span><br />
<br />
<span class="nu0">25</span> rows selected.<br />
SQL&gt;</div></div>
<p>Talvez essa não seja a melhor forma de fazer isso (obviamente, que usar SQL pra calcular isso não é a melhor saída). Mesmo assim, fica como um &#8220;desafio vencido&#8221;. </p>
<p>Comentários <a href="http://glufke.net/oracle/viewtopic.php?t=637">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/10/11/select-que-retorna-os-numeros-primos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Descobrir qual procedure/função que está rodando dinamicamente</title>
		<link>http://glufke.net/2007/10/03/descobrir-qual-procedurefuncao-que-esta-rodando-dinamicamente/</link>
		<comments>http://glufke.net/2007/10/03/descobrir-qual-procedurefuncao-que-esta-rodando-dinamicamente/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 11:20:13 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[PL/SQL]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/10/03/descobrir-qual-procedurefuncao-que-esta-rodando-dinamicamente/</guid>
		<description><![CDATA[As vezes precisamos saber em uma procedure/função &#8220;quem chamou&#8221; a rotina. Ou saber qual é a procedure ou package que está sendo executada&#8230; Esta rotina faz exatamente isto! 
CREATE OR REPLACE PROCEDURE who_called_me&#40;owner&#160; &#160; OUT VARCHAR2,
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>As vezes precisamos saber em uma procedure/função &#8220;quem chamou&#8221; a rotina. Ou saber qual é a procedure ou package que está sendo executada&#8230; Esta rotina faz exatamente isto! <span id="more-19"></span></p>
<div class="codecolorer-container plsql"><div class="codecolorer" style="font-family: monospace;"><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CREATE"><span class="kw1">CREATE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=REPLACE"><span class="kw2">REPLACE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=PROCEDURE"><span class="kw1">PROCEDURE</span></a> who_called_me<span class="br0">&#40;</span>owner&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OUT"><span class="kw1">OUT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name&nbsp; &nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OUT"><span class="kw1">OUT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lineno&nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OUT"><span class="kw1">OUT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NUMBER"><span class="kw1">NUMBER</span></a>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; caller_t <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OUT"><span class="kw1">OUT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=AS"><span class="kw1">AS</span></a><br />
&nbsp; call_stack&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a><span class="br0">&#40;</span><span class="nu0">4096</span><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DEFAULT"><span class="kw1">DEFAULT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DBMS_UTILITY"><span class="kw3">DBMS_UTILITY</span></a>.format_call_stack;<br />
&nbsp; n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NUMBER"><span class="kw1">NUMBER</span></a>;<br />
&nbsp; found_stack <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BOOLEAN"><span class="kw1">BOOLEAN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DEFAULT"><span class="kw1">DEFAULT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FALSE"><span class="kw1">FALSE</span></a>;<br />
&nbsp; line&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a><span class="br0">&#40;</span><span class="nu0">255</span><span class="br0">&#41;</span>;<br />
&nbsp; cnt&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NUMBER"><span class="kw1">NUMBER</span></a> := <span class="nu0">0</span>;<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
&nbsp; <span class="co1">-- </span><br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LOOP"><span class="kw1">LOOP</span></a><br />
&nbsp; &nbsp; n := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=INSTR"><span class="kw2">INSTR</span></a><span class="br0">&#40;</span>call_stack, <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CHR"><span class="kw2">CHR</span></a><span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=EXIT"><span class="kw1">EXIT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=WHEN"><span class="kw1">WHEN</span></a><span class="br0">&#40;</span>cnt = <span class="nu0">3</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> n <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NULL"><span class="kw1">NULL</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> n = <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="co1">-- </span><br />
&nbsp; &nbsp; line&nbsp; &nbsp; &nbsp; &nbsp;:= <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SUBSTR"><span class="kw2">SUBSTR</span></a><span class="br0">&#40;</span>call_stack, <span class="nu0">1</span>, n - <span class="nu0">1</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; call_stack := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SUBSTR"><span class="kw2">SUBSTR</span></a><span class="br0">&#40;</span>call_stack, n + <span class="nu0">1</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="co1">-- </span><br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> <span class="br0">&#40;</span><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NOT"><span class="kw1">NOT</span></a> found_stack<span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> <span class="br0">&#40;</span>line <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LIKE"><span class="kw1">LIKE</span></a> <span class="st0">'%handle%number%name%'</span><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; found_stack := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=TRUE"><span class="kw1">TRUE</span></a>;<br />
&nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a>;<br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSE"><span class="kw1">ELSE</span></a><br />
&nbsp; &nbsp; &nbsp; cnt := cnt + <span class="nu0">1</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="co1">-- cnt = 1 is ME</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">-- cnt = 2 is MY Caller</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">-- cnt = 3 is Their Caller</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> <span class="br0">&#40;</span>cnt = <span class="nu0">3</span><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; lineno := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=TO_NUMBER"><span class="kw2">TO_NUMBER</span></a><span class="br0">&#40;</span><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SUBSTR"><span class="kw2">SUBSTR</span></a><span class="br0">&#40;</span>line, <span class="nu0">13</span>, <span class="nu0">6</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; line&nbsp; &nbsp;:= <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SUBSTR"><span class="kw2">SUBSTR</span></a><span class="br0">&#40;</span>line, <span class="nu0">21</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> <span class="br0">&#40;</span>line <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LIKE"><span class="kw1">LIKE</span></a> <span class="st0">'pr%'</span><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LENGTH"><span class="kw2">LENGTH</span></a><span class="br0">&#40;</span><span class="st0">'procedure '</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSIF"><span class="kw1">ELSIF</span></a> <span class="br0">&#40;</span>line <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LIKE"><span class="kw1">LIKE</span></a> <span class="st0">'fun%'</span><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LENGTH"><span class="kw2">LENGTH</span></a><span class="br0">&#40;</span><span class="st0">'function '</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSIF"><span class="kw1">ELSIF</span></a> <span class="br0">&#40;</span>line <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LIKE"><span class="kw1">LIKE</span></a> <span class="st0">'package body%'</span><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LENGTH"><span class="kw2">LENGTH</span></a><span class="br0">&#40;</span><span class="st0">'package body '</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSIF"><span class="kw1">ELSIF</span></a> <span class="br0">&#40;</span>line <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LIKE"><span class="kw1">LIKE</span></a> <span class="st0">'pack%'</span><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LENGTH"><span class="kw2">LENGTH</span></a><span class="br0">&#40;</span><span class="st0">'package '</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSIF"><span class="kw1">ELSIF</span></a> <span class="br0">&#40;</span>line <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LIKE"><span class="kw1">LIKE</span></a> <span class="st0">'anonymous%'</span><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LENGTH"><span class="kw2">LENGTH</span></a><span class="br0">&#40;</span><span class="st0">'anonymous block '</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSE"><span class="kw1">ELSE</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NULL"><span class="kw1">NULL</span></a>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> <span class="br0">&#40;</span>n <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NOT"><span class="kw1">NOT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NULL"><span class="kw1">NULL</span></a><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; caller_t := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LTRIM"><span class="kw2">LTRIM</span></a><span class="br0">&#40;</span><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RTRIM"><span class="kw2">RTRIM</span></a><span class="br0">&#40;</span><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=UPPER"><span class="kw2">UPPER</span></a><span class="br0">&#40;</span><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SUBSTR"><span class="kw2">SUBSTR</span></a><span class="br0">&#40;</span>line, <span class="nu0">1</span>, n - <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSE"><span class="kw1">ELSE</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; caller_t := <span class="st0">'TRIGGER'</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a>;<br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; line&nbsp; := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SUBSTR"><span class="kw2">SUBSTR</span></a><span class="br0">&#40;</span>line, <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NVL"><span class="kw2">NVL</span></a><span class="br0">&#40;</span>n, <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; n&nbsp; &nbsp; &nbsp;:= <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=INSTR"><span class="kw2">INSTR</span></a><span class="br0">&#40;</span>line, <span class="st0">'.'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; owner := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LTRIM"><span class="kw2">LTRIM</span></a><span class="br0">&#40;</span><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RTRIM"><span class="kw2">RTRIM</span></a><span class="br0">&#40;</span><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SUBSTR"><span class="kw2">SUBSTR</span></a><span class="br0">&#40;</span>line, <span class="nu0">1</span>, n - <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; name&nbsp; := <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LTRIM"><span class="kw2">LTRIM</span></a><span class="br0">&#40;</span><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RTRIM"><span class="kw2">RTRIM</span></a><span class="br0">&#40;</span><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SUBSTR"><span class="kw2">SUBSTR</span></a><span class="br0">&#40;</span>line, n + <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a>;<br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a>;<br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LOOP"><span class="kw1">LOOP</span></a>;<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a>;<br />
/<br />
<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CREATE"><span class="kw1">CREATE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=REPLACE"><span class="kw2">REPLACE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FUNCTION"><span class="kw1">FUNCTION</span></a> who_am_i <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a><br />
l_owner <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a><span class="br0">&#40;</span><span class="nu0">30</span><span class="br0">&#41;</span>; l_name <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a><span class="br0">&#40;</span><span class="nu0">30</span><span class="br0">&#41;</span>; l_lineno <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NUMBER"><span class="kw1">NUMBER</span></a>; l_type <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a><span class="br0">&#40;</span><span class="nu0">30</span><span class="br0">&#41;</span>;<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
who_called_me<span class="br0">&#40;</span>l_owner, l_name, l_lineno, l_type<span class="br0">&#41;</span>; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> l_owner || <span class="st0">'.'</span> || l_name;<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a>;<br />
/</div></div>
<p><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><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Aí­ vai um exemplo:</p>
<div class="codecolorer-container plsql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CREATE"><span class="kw1">CREATE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=REPLACE"><span class="kw2">REPLACE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=PROCEDURE"><span class="kw1">PROCEDURE</span></a> demo<br />
&nbsp; <span class="nu0">2</span>&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=AS"><span class="kw1">AS</span></a><br />
&nbsp; <span class="nu0">3</span>&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
&nbsp; <span class="nu0">4</span>&nbsp; &nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DBMS_OUTPUT"><span class="kw3">DBMS_OUTPUT</span></a>.put_line<span class="br0">&#40;</span> who_am_i <span class="br0">&#41;</span>;<br />
&nbsp; <span class="nu0">5</span>&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a>;<br />
&nbsp; <span class="nu0">6</span>&nbsp; /<br />
<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=PROCEDURE"><span class="kw1">PROCEDURE</span></a> created.<br />
<br />
SQL&gt; exec demo;<br />
SCOTT.DEMO</div></div>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?t=828">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/10/03/descobrir-qual-procedurefuncao-que-esta-rodando-dinamicamente/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Como usar Índices Virtuais - NOSEGMENT INDEXES</title>
		<link>http://glufke.net/2007/09/25/como-usar-indices-virtuais-nosegment-indexes/</link>
		<comments>http://glufke.net/2007/09/25/como-usar-indices-virtuais-nosegment-indexes/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 22:49:51 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[DBA]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/09/25/como-usar-indices-virtuais-nosegment-indexes/</guid>
		<description><![CDATA[Essa é para quem faz tunning de SQL. Digamos que você quer verificar se a criação de um novo í­ndice vai ser realmente usada pelo otimizador. Antes de criá-lo, você pode testar se ele resolverá seu problema atraves de INDICE VIRTUAL.
O Oracle vai criar o í­ndice no dicionário de dados mas não vai criar o [...]]]></description>
			<content:encoded><![CDATA[<p>Essa é para quem faz tunning de SQL. Digamos que você quer verificar se a criação de um novo í­ndice vai ser realmente usada pelo otimizador. Antes de criá-lo, você pode testar se ele resolverá seu problema atraves de INDICE VIRTUAL.<span id="more-17"></span></p>
<p>O Oracle vai criar o í­ndice no dicionário de dados mas não vai criar o í­ndice fisicamente. Nada será armazenado nem acessado!</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">SET</span> autotrace traceonly <span class="kw1">EXPLAIN</span><br />
<br />
SQL&gt; <span class="kw1">SELECT</span> name <span class="kw1">FROM</span> emp <span class="kw1">WHERE</span> name = <span class="st0">'Alex'</span>;<br />
<br />
Execution Plan<br />
<span class="co1">----------------------------------------------------------</span><br />
&nbsp; &nbsp;<span class="nu0">0</span>&nbsp; &nbsp; &nbsp; <span class="kw1">SELECT</span> STATEMENT Optimizer=CHOOSE <span class="br0">&#40;</span>Cost=<span class="nu0">164</span> Card=<span class="nu0">1</span> Bytes=<span class="nu0">500</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;<span class="nu0">1</span>&nbsp; &nbsp; <span class="nu0">0</span>&nbsp; &nbsp;<span class="kw1">TABLE</span> ACCESS <span class="br0">&#40;</span>FULL<span class="br0">&#41;</span> OF <span class="st0">'EMP'</span> <span class="br0">&#40;</span>Cost=<span class="nu0">164</span> Card=<span class="nu0">1</span> Bytes=<span class="nu0">500</span><span class="br0">&#41;</span></div></div>
<p><strong>Criando o Í­ndice</strong></p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">CREATE</span> <span class="kw1">INDEX</span> emp_vir_idx1 <span class="kw1">ON</span> emp<span class="br0">&#40;</span>name<span class="br0">&#41;</span> nosegment;<br />
<br />
<span class="kw1">INDEX</span> created.</div></div>
<p><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><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Agora, vamos ver se ele vai usar:</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">SET</span> autotrace traceonly <span class="kw1">EXPLAIN</span><br />
<br />
SQL&gt; <span class="kw1">SELECT</span> name <span class="kw1">FROM</span> emp <span class="kw1">WHERE</span> name = <span class="st0">'Alex'</span>;<br />
<br />
Execution Plan<br />
<span class="co1">----------------------------------------------------------</span><br />
&nbsp; &nbsp;<span class="nu0">0</span>&nbsp; &nbsp; &nbsp; <span class="kw1">SELECT</span> STATEMENT Optimizer=CHOOSE <span class="br0">&#40;</span>Cost=<span class="nu0">164</span> Card=<span class="nu0">1</span> Bytes=<span class="nu0">500</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;<span class="nu0">1</span>&nbsp; &nbsp; <span class="nu0">0</span>&nbsp; &nbsp;<span class="kw1">TABLE</span> ACCESS <span class="br0">&#40;</span>FULL<span class="br0">&#41;</span> OF <span class="st0">'EMP'</span> <span class="br0">&#40;</span>Cost=<span class="nu0">164</span> Card=<span class="nu0">1</span> Bytes=<span class="nu0">500</span><span class="br0">&#41;</span></div></div>
<p>Hei! Acesso FULL? Porque o oracle não está usando meu novo í­ndice?<br />
Você deve primeiro alterar sua sessão com o parâmetro oculto &#8220;_use_nosegment_indexes&#8221;.</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">ALTER</span> session <span class="kw1">SET</span> <span class="st0">&quot;_use_nosegment_indexes&quot;</span> = true;<br />
<br />
Session altered.<br />
<br />
SQL&gt; <span class="kw1">SELECT</span> name <span class="kw1">FROM</span> emp <span class="kw1">WHERE</span> name = <span class="st0">'Alex'</span>;<br />
<br />
Execution Plan<br />
<span class="co1">----------------------------------------------------------</span><br />
&nbsp; &nbsp;<span class="nu0">0</span>&nbsp; &nbsp; &nbsp; <span class="kw1">SELECT</span> STATEMENT Optimizer=CHOOSE <span class="br0">&#40;</span>Cost=<span class="nu0">1</span> Card=<span class="nu0">1</span> Bytes=<span class="nu0">500</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;<span class="nu0">1</span>&nbsp; &nbsp; <span class="nu0">0</span>&nbsp; &nbsp;<span class="kw1">INDEX</span> <span class="br0">&#40;</span>RANGE SCAN<span class="br0">&#41;</span> OF <span class="st0">'EMP_VIR_IDX1'</span> <span class="br0">&#40;</span>NON-<span class="kw1">UNIQUE</span><span class="br0">&#41;</span> <span class="br0">&#40;</span>Cost=<span class="nu0">1</span> Card=<span class="nu0">1</span> Bytes=<span class="nu0">500</span><span class="br0">&#41;</span></div></div>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?t=417">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/09/25/como-usar-indices-virtuais-nosegment-indexes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Potência em PL/SQL sem usar função POWER</title>
		<link>http://glufke.net/2007/09/25/potencia-em-plsql-sem-usar-funcao-power/</link>
		<comments>http://glufke.net/2007/09/25/potencia-em-plsql-sem-usar-funcao-power/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 22:41:51 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[PL/SQL]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/09/25/potencia-em-plsql-sem-usar-funcao-power/</guid>
		<description><![CDATA[Todos conhecem a função do Oracle que faz a potêcia: o POWER. Abaixo, vamos demonstrar como elevar números sem usar essa função.
SELECT power&#40;2,3&#41;
FROM dual
Além dessa função é possível usar o ** para potência:
SQL&#62; SET serveroutput ON
SQL&#62; DECLARE
&#160; 2&#160; &#160; vtemp NUMBER;
&#160; 3&#160; BEGIN
&#160; 4&#160; &#160; vtemp := 2**3;&#160; &#160;-- Equivalente a POWER(2,3)
&#160; 5&#160; &#160; DBMS_OUTPUT.put_line [...]]]></description>
			<content:encoded><![CDATA[<p>Todos conhecem a função do Oracle que faz a potêcia: o POWER. Abaixo, vamos demonstrar como elevar números sem usar essa função.<span id="more-16"></span></p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;"><span class="kw1">SELECT</span> power<span class="br0">&#40;</span><span class="nu0">2</span>,<span class="nu0">3</span><span class="br0">&#41;</span><br />
<span class="kw1">FROM</span> dual</div></div>
<p>Além dessa função é possível usar o ** para potência:</p>
<div class="codecolorer-container plsql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SET"><span class="kw1">SET</span></a> serveroutput <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ON"><span class="kw1">ON</span></a><br />
SQL&gt; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DECLARE"><span class="kw1">DECLARE</span></a><br />
&nbsp; <span class="nu0">2</span>&nbsp; &nbsp; vtemp <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NUMBER"><span class="kw1">NUMBER</span></a>;<br />
&nbsp; <span class="nu0">3</span>&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
&nbsp; <span class="nu0">4</span>&nbsp; &nbsp; vtemp := <span class="nu0">2</span>**<span class="nu0">3</span>;&nbsp; &nbsp;<span class="co1">-- Equivalente a POWER(2,3)</span><br />
&nbsp; <span class="nu0">5</span>&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DBMS_OUTPUT"><span class="kw3">DBMS_OUTPUT</span></a>.put_line <span class="br0">&#40;</span> <span class="st0">'Resultado: '</span>||vtemp <span class="br0">&#41;</span>;<br />
&nbsp; <span class="nu0">6</span>&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a>;<br />
&nbsp; <span class="nu0">7</span>&nbsp; /<br />
Resultado: <span class="nu0">8</span><br />
<br />
PL/<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SQL"><span class="kw1">SQL</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=PROCEDURE"><span class="kw1">PROCEDURE</span></a> successfully completed.<br />
<br />
SQL&gt;</div></div>
<p><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><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Verificamos que o uso do ** equivale a função POWER do Oracle. Infelizmente o uso não é permitido dentro de blocos PL/SQL. Não funciona direto num SQL.</p>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?t=662">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/09/25/potencia-em-plsql-sem-usar-funcao-power/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ver Plano de execução de um SQL rodando</title>
		<link>http://glufke.net/2007/09/25/ver-plano-de-execucao-de-um-sql-rodando/</link>
		<comments>http://glufke.net/2007/09/25/ver-plano-de-execucao-de-um-sql-rodando/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 14:36:31 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[DBA]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/09/25/ver-plano-de-execucao-de-um-sql-rodando/</guid>
		<description><![CDATA[Imagine que você rodou um SQL que está demorando muito. O Trace está desligado e você quer saber o que pode estar errado com o SQL. Com essa dica, você enxerga o plano de execução deste SQL.
1. Escolha o SQL que está rodando
SELECT address, hash_value, child_number, sql_text
FROM v$sql
WHERE users_executing &#60;&#62; 0
/




2. Rode o sql abaixo, [...]]]></description>
			<content:encoded><![CDATA[<p>Imagine que você rodou um SQL que está demorando muito. O Trace está desligado e você quer saber o que pode estar errado com o SQL. Com essa dica, você enxerga o plano de execução deste SQL.<span id="more-18"></span></p>
<p><strong>1. Escolha o SQL que está rodando</strong></p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;"><span class="kw1">SELECT</span> address, hash_value, child_number, sql_text<br />
<span class="kw1">FROM</span> v$sql<br />
<span class="kw1">WHERE</span> users_executing &lt;&gt; <span class="nu0">0</span><br />
/</div></div>
<p><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><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<strong>2. Rode o sql abaixo, informando o address, hash_value, child_number retornado do Primeiro SQL.</strong></p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;"><span class="kw1">SET</span> VERIFY OFF<br />
COL id&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FORMAT <span class="nu0">999</span><br />
COL parent_id&nbsp; &nbsp;FORMAT <span class="nu0">999</span> HEADING <span class="st0">&quot;PARENT&quot;</span><br />
COL operation&nbsp; &nbsp;FORMAT a35 <span class="kw1">TRUNCATE</span><br />
COL object_name FORMAT a30<br />
<span class="kw1">SELECT</span>&nbsp; id, parent_id, LPAD <span class="br0">&#40;</span><span class="st0">' '</span>, LEVEL - <span class="nu0">1</span><span class="br0">&#41;</span> ||<br />
&nbsp; &nbsp; &nbsp; &nbsp; operation || <span class="st0">' '</span> || options operation, object_name<br />
<span class="kw1">FROM</span>&nbsp; &nbsp; <span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">SELECT</span> id, parent_id, operation, options, object_name<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">FROM</span>&nbsp; &nbsp;v$sql_plan<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">WHERE</span>&nbsp; address = <span class="st0">'&amp;address'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AND</span>&nbsp; &nbsp; hash_value = &amp;hash_value<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AND</span>&nbsp; &nbsp; child_number = &amp;child_number<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
START <span class="kw1">WITH</span> id = <span class="nu0">0</span><br />
CONNECT <span class="kw1">BY</span> PRIOR id = parent_id;</div></div>
<p>Obrigado a Roger Schrag que é o autor dessa dica!<br />
Comente <a href="http://glufke.net/oracle/viewtopic.php?t=538">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/09/25/ver-plano-de-execucao-de-um-sql-rodando/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bloco do Forms baseado numa VIEW</title>
		<link>http://glufke.net/2007/09/13/bloco-do-forms-baseado-numa-view/</link>
		<comments>http://glufke.net/2007/09/13/bloco-do-forms-baseado-numa-view/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 14:30:26 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[Oracle Forms]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/09/13/bloco-do-forms-baseado-numa-view/</guid>
		<description><![CDATA[Uma coisa muito útil no Forms é poder basear os blocos em Views. Vamos a um breve exemplo: Digamos que uma tabela contenha os itens de um pedido. Obviamente, apenas o código do produto estará nesta tabela e não a descrição do produto. Como fazer para mostrar a descrição ?
Estrutura das tabelas:
ITENS_PEDIDO
&#160; IT_COD&#160; &#160; NUMBER&#40;5&#41;,
&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Uma coisa muito útil no Forms é poder basear os blocos em Views. Vamos a um breve exemplo: Digamos que uma tabela contenha os itens de um pedido. Obviamente, apenas o código do produto estará nesta tabela e não a descrição do produto. Como fazer para mostrar a descrição ?<span id="more-15"></span></p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">Estrutura das tabelas:<br />
ITENS_PEDIDO<br />
&nbsp; IT_COD&nbsp; &nbsp; NUMBER<span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span>,<br />
&nbsp; PROD_COD&nbsp; NUMBER<span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span>,<br />
&nbsp; QUANT&nbsp; &nbsp; &nbsp;NUMBER<span class="br0">&#40;</span><span class="nu0">10</span>,<span class="nu0">2</span><span class="br0">&#41;</span><br />
<br />
PRODUTO<br />
&nbsp; PROD_COD&nbsp; NUMBER<span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span>,<br />
&nbsp; PROD_DSC&nbsp; VARCHAR2<span class="br0">&#40;</span><span class="nu0">60</span><span class="br0">&#41;</span></div></div>
<p><strong>POUCO EFICIENTE</strong></p>
<p>Podemos usar a trigger POST_QUERY, que é disparada em cada linha do bloco. Dentro desta trigger, coloca-se uma consulta assim:</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;"><span class="kw1">SELECT</span> prod_dsc<br />
<span class="kw1">INTO</span> :BLOCO_ITENS_PED.PROD_DSC<br />
<span class="kw1">FROM</span> produto<br />
<span class="kw1">WHERE</span> prod_cod=:BLOCO_ITENS_PED.PROD_COD;</div></div>
<p>Este select rodará em cada linha do bloco, buscando a descrição do Produto. Temos que deixar a propriedade do item Database Item No.<br />
Isto é <strong>pouquíssimo eficiente</strong>! Imaginem se o bloco for buscar 500 linhas? O cliente vai fazer 500 consultas de descrição!!! Resultado: Queda de performance do banco, trafego inútil na rede, etc.<br />
<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><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<strong>MUITO EFICIENTE</strong></p>
<p>Vamos basear nosso bloco numa View! Como fazemos isso?</p>
<p>1. Criamos uma VIEW_ITENS_PEDIDO com a descrição do Produto.</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;"><span class="kw1">CREATE</span> <span class="kw1">OR</span> <span class="kw1">REPLACE</span> <span class="kw1">VIEW</span> VIEW_ITENS_PEDIDO <span class="kw1">AS</span><br />
<span class="kw1">SELECT</span><br />
&nbsp; a.*,<br />
&nbsp; b.prod_dsc<br />
<span class="kw1">FROM</span><br />
&nbsp; itens_pedido A,<br />
&nbsp; produto&nbsp; &nbsp; &nbsp; B<br />
<span class="kw1">WHERE</span> a.prod_cod=b.prod_cod</div></div>
<p>2. Criamos o bloco com base nesta view. Agora vamos tornar esta view &#8220;alterável&#8221;<br />
3. Na propriedade do bloco DML Data Target Name, colocamos o nome da tabela onde será feita a alteração. (no caso, a própria ITENS_PEDIDO)<br />
4. Vamos definir agora qual será o campo chave da tabela. Clicamos no item IT_COD, e vamos para a propriedade Primary Key. Colocamos YES nela.<br />
5. Agora vamos dizer ao Forms que o campo PROD_DSC não faz parte da tabela! Alteramos a propriedade Query Only para Yes!<br />
E Pronto!!!<br />
Agora o Forms sabe que o campo PROD_DSC não deve ser gravado quando a tabela for modificada. Ele sabe que este campo não pertence diretamente a ITENS_PEDIDO! </p>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?t=5">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/09/13/bloco-do-forms-baseado-numa-view/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Transformar linhas do SQL em string delimitada</title>
		<link>http://glufke.net/2007/09/12/transformar-linhas-do-sql-em-string-delimitada/</link>
		<comments>http://glufke.net/2007/09/12/transformar-linhas-do-sql-em-string-delimitada/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 20:02:00 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[PL/SQL]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/09/12/transformar-linhas-do-sql-em-string-delimitada/</guid>
		<description><![CDATA[Essa procedure pode ser muito útil em algumas situações: Ela pega as linhas de uma coluna e retorna cada linha separada por ví­rgula na mesma string. 
CREATE OR REPLACE FUNCTION rowtocol &#40;
&#160; &#160;p_slct IN VARCHAR2,
&#160; &#160;p_dlmtr IN VARCHAR2 DEFAULT ',' &#41; RETURN VARCHAR2 AUTHID CURRENT_USER 
AS
&#160; &#160;TYPE c_refcur IS REF CURSOR;
&#160; &#160;lc_str VARCHAR2&#40;4000&#41;;
&#160; &#160;lc_colval VARCHAR2&#40;4000&#41;;
&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Essa procedure pode ser muito útil em algumas situações: Ela pega as linhas de uma coluna e retorna cada linha separada por ví­rgula na mesma string. <span id="more-14"></span></p>
<div class="codecolorer-container plsql"><div class="codecolorer" style="font-family: monospace;"><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CREATE"><span class="kw1">CREATE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=REPLACE"><span class="kw2">REPLACE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FUNCTION"><span class="kw1">FUNCTION</span></a> rowtocol <span class="br0">&#40;</span><br />
&nbsp; &nbsp;p_slct <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IN"><span class="kw1">IN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a>,<br />
&nbsp; &nbsp;p_dlmtr <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IN"><span class="kw1">IN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DEFAULT"><span class="kw1">DEFAULT</span></a> <span class="st0">','</span> <span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=AUTHID"><span class="kw1">AUTHID</span></a> CURRENT_USER <br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=AS"><span class="kw1">AS</span></a><br />
&nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=TYPE"><span class="kw1">TYPE</span></a> c_refcur <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=REF"><span class="kw2">REF</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CURSOR"><span class="kw1">CURSOR</span></a>;<br />
&nbsp; &nbsp;lc_str <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a><span class="br0">&#40;</span><span class="nu0">4000</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;lc_colval <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a><span class="br0">&#40;</span><span class="nu0">4000</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;c_dummy c_refcur;<br />
&nbsp; &nbsp;l <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NUMBER"><span class="kw1">NUMBER</span></a>;<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
&nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OPEN"><span class="kw1">OPEN</span></a> c_dummy <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FOR"><span class="kw1">FOR</span></a> p_slct;<br />
&nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LOOP"><span class="kw1">LOOP</span></a><br />
&nbsp; &nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FETCH"><span class="kw1">FETCH</span></a> c_dummy <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=INTO"><span class="kw1">INTO</span></a> lc_colval;<br />
&nbsp; &nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=EXIT"><span class="kw1">EXIT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=WHEN"><span class="kw1">WHEN</span></a> c_dummy%NOTFOUND;<br />
&nbsp; &nbsp; &nbsp;lc_str := lc_str || p_dlmtr || lc_colval;<br />
&nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=LOOP"><span class="kw1">LOOP</span></a>;<br />
&nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CLOSE"><span class="kw1">CLOSE</span></a> c_dummy;<br />
&nbsp; &nbsp;<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=SUBSTR"><span class="kw2">SUBSTR</span></a><span class="br0">&#40;</span>lc_str,<span class="nu0">2</span><span class="br0">&#41;</span>;<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a>;</div></div>
<p><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><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Agora vamos ao exemplo:</p>
<div class="codecolorer-container sql" style="height:280px;"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">CREATE</span> <span class="kw1">OR</span> <span class="kw1">REPLACE</span> <span class="kw1">FUNCTION</span> rowtocol <span class="br0">&#40;</span><br />
&nbsp; <span class="nu0">2</span>&nbsp; &nbsp; &nbsp;p_slct <span class="kw1">IN</span> VARCHAR2,<br />
&nbsp; <span class="nu0">3</span>&nbsp; &nbsp; &nbsp;p_dlmtr <span class="kw1">IN</span> VARCHAR2 <span class="kw1">DEFAULT</span> <span class="st0">','</span> <span class="br0">&#41;</span><br />
&nbsp; <span class="nu0">4</span>&nbsp; <span class="kw1">RETURN</span> VARCHAR2<br />
&nbsp; <span class="nu0">5</span>&nbsp; &nbsp; &nbsp;AUTHID CURRENT_USER <span class="kw1">AS</span><br />
&nbsp; <span class="nu0">6</span>&nbsp; &nbsp; &nbsp;TYPE c_refcur <span class="kw1">IS</span> REF CURSOR;<br />
&nbsp; <span class="nu0">7</span>&nbsp; &nbsp; &nbsp;lc_str VARCHAR2<span class="br0">&#40;</span><span class="nu0">4000</span><span class="br0">&#41;</span>;<br />
&nbsp; <span class="nu0">8</span>&nbsp; &nbsp; &nbsp;lc_colval VARCHAR2<span class="br0">&#40;</span><span class="nu0">4000</span><span class="br0">&#41;</span>;<br />
&nbsp; <span class="nu0">9</span>&nbsp; &nbsp; &nbsp;c_dummy c_refcur;<br />
&nbsp;<span class="nu0">10</span>&nbsp; &nbsp; &nbsp;l number;<br />
&nbsp;<span class="nu0">11</span>&nbsp; BEGIN<br />
&nbsp;<span class="nu0">12</span>&nbsp; &nbsp; &nbsp;OPEN c_dummy <span class="kw1">FOR</span> p_slct;<br />
&nbsp;<span class="nu0">13</span>&nbsp; &nbsp; &nbsp;LOOP<br />
&nbsp;<span class="nu0">14</span>&nbsp; &nbsp; &nbsp; &nbsp;FETCH c_dummy <span class="kw1">INTO</span> lc_colval;<br />
&nbsp;<span class="nu0">15</span>&nbsp; &nbsp; &nbsp; &nbsp;EXIT WHEN c_dummy%NOTFOUND;<br />
&nbsp;<span class="nu0">16</span>&nbsp; &nbsp; &nbsp; &nbsp;lc_str := lc_str || p_dlmtr || lc_colval;<br />
&nbsp;<span class="nu0">17</span>&nbsp; &nbsp; &nbsp;END LOOP;<br />
&nbsp;<span class="nu0">18</span>&nbsp; &nbsp; &nbsp;CLOSE c_dummy;<br />
&nbsp;<span class="nu0">19</span>&nbsp; &nbsp; &nbsp;<span class="kw1">RETURN</span> SUBSTR<span class="br0">&#40;</span>lc_str,<span class="nu0">2</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="nu0">20</span>&nbsp; END;<br />
&nbsp;<span class="nu0">21</span>&nbsp; /<br />
<br />
<span class="kw1">FUNCTION</span> created.<br />
<br />
SQL&gt; <span class="kw1">SELECT</span> ROWTOCOL<span class="br0">&#40;</span><span class="st0">'SELECT ENAME FROM EMP'</span><span class="br0">&#41;</span> <span class="kw1">FROM</span> DUAL;<br />
<br />
ROWTOCOL<span class="br0">&#40;</span><span class="st0">'SELECTENAMEFROMEMP'</span><span class="br0">&#41;</span><br />
<span class="co1">------------------------------------------------------------------</span><br />
SMITE,ALLEN,WARD,JONES,MARTIN,BLAKE,SCOTT,TURNER,ADAMS,JAMES,FORD<br />
<br />
SQL&gt;</div></div>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?t=31">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/09/12/transformar-linhas-do-sql-em-string-delimitada/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CASE WHEN versus DECODE</title>
		<link>http://glufke.net/2007/09/07/12/</link>
		<comments>http://glufke.net/2007/09/07/12/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 10:14:20 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/09/07/12/</guid>
		<description><![CDATA[As vezes o CASE WHEN quebra o galho quando temos que usar condições mais complexas&#8230; Mas o que fazer quando não é possí­vel usá-lo? (como nas versões anteriores ao 8i, e no PL*SQL anterior ao 9i). É muito simples! 
Eis o nosso query:
SQL&#62; SELECT 
&#160; 2&#160; &#160; empno
&#160; 3&#160; , sal
&#160; 4&#160; , case 
&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>As vezes o CASE WHEN quebra o galho quando temos que usar condições mais complexas&#8230; Mas o que fazer quando não é possí­vel usá-lo? (como nas versões anteriores ao 8i, e no PL*SQL anterior ao 9i). É muito simples! <span id="more-12"></span></p>
<p>Eis o nosso query:</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">SELECT</span> <br />
&nbsp; <span class="nu0">2</span>&nbsp; &nbsp; empno<br />
&nbsp; <span class="nu0">3</span>&nbsp; , sal<br />
&nbsp; <span class="nu0">4</span>&nbsp; , case <br />
&nbsp; <span class="nu0">5</span>&nbsp; &nbsp; &nbsp; when sal&lt;<span class="nu0">1000</span>&nbsp; then <span class="st0">'SALARIO BAIXO'</span><br />
&nbsp; <span class="nu0">6</span>&nbsp; &nbsp; &nbsp; when sal&gt;=<span class="nu0">1000</span> then <span class="st0">'SALARIO ALTO'</span><br />
&nbsp; <span class="nu0">7</span>&nbsp; &nbsp; end comentario <br />
&nbsp; <span class="nu0">8</span>&nbsp; <span class="kw1">FROM</span> emp<br />
&nbsp; <span class="nu0">9</span>&nbsp; /<br />
<br />
&nbsp; &nbsp; &nbsp;EMPNO&nbsp; &nbsp; &nbsp; &nbsp; SAL COMENTARIO<br />
<span class="co1">---------- ---------- -------------</span><br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7369</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">800</span> SALARIO BAIXO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7499</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1600</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7521</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1250</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7566</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2975</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7654</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1250</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7698</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2850</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7782</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2450</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7788</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">3000</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7839</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">5000</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7844</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1500</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7876</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1100</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7900</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">999</span> SALARIO BAIXO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7902</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">3000</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7934</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1000</span> SALARIO ALTO</div></div>
<p><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><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>E agora um query exatamente IGUAL sem o tal case-when&#8230;</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">SELECT</span> <br />
&nbsp; <span class="nu0">2</span>&nbsp; &nbsp; empno<br />
&nbsp; <span class="nu0">3</span>&nbsp; , sal<br />
&nbsp; <span class="nu0">4</span>&nbsp; , decode<span class="br0">&#40;</span>sign<span class="br0">&#40;</span>sal<span class="nu0">-1000</span><span class="br0">&#41;</span>, <span class="nu0">-1</span>, <span class="st0">'SALARIO BAIXO'</span>, <span class="st0">'SALARIO ALTO'</span><span class="br0">&#41;</span><br />
&nbsp; <span class="nu0">5</span>&nbsp; <span class="kw1">FROM</span> emp<br />
&nbsp; <span class="nu0">6</span>&nbsp; /<br />
<br />
&nbsp; &nbsp; &nbsp;EMPNO&nbsp; &nbsp; &nbsp; &nbsp; SAL DECODE<span class="br0">&#40;</span>SIGN<span class="br0">&#40;</span>S<br />
<span class="co1">---------- ---------- -------------</span><br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7369</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">800</span> SALARIO BAIXO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7499</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1600</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7521</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1250</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7566</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2975</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7654</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1250</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7698</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2850</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7782</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2450</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7788</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">3000</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7839</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">5000</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7844</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1500</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7876</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1100</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7900</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">999</span> SALARIO BAIXO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7902</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">3000</span> SALARIO ALTO<br />
&nbsp; &nbsp; &nbsp; <span class="nu0">7934</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1000</span> SALARIO ALTO<br />
SQL&gt;</div></div>
<p>Mais uma forma de se fazer isso SEM case-when:</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;"><span class="kw1">SELECT</span><br />
&nbsp; empno<br />
, sal<br />
, decode<span class="br0">&#40;</span>greatest<span class="br0">&#40;</span>sal,<span class="nu0">1000</span><span class="br0">&#41;</span>, <span class="nu0">1000</span>, <span class="st0">'SALARIO BAIXO'</span>, <span class="st0">'SALARIO ALTO'</span><span class="br0">&#41;</span><br />
<span class="kw1">FROM</span> emp<br />
/</div></div>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?t=12">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/09/07/12/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Order By muda em diferentes NLS_LANG</title>
		<link>http://glufke.net/2007/09/06/order-by-muda-em-diferentes-nls_lang/</link>
		<comments>http://glufke.net/2007/09/06/order-by-muda-em-diferentes-nls_lang/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 17:50:30 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/09/06/order-by-muda-em-diferentes-nls_lang/</guid>
		<description><![CDATA[Sabemos que mudando o NLS_LANG do oracle, ele assume comportamentos diferentes. (Por exemplo, muda o formato da Data, muda o Ponto Decimal ou Vírgula Decimal, etc.) Mas uma coisa que as vezes passa &#8220;desapercebido&#8221; é que o NLS_LANG também pode mudar a ORDEM das colunas: 
Exemplo: (Note a diferença)
SQL&#62; SELECT * FROM A ORDER BY [...]]]></description>
			<content:encoded><![CDATA[<p>Sabemos que mudando o NLS_LANG do oracle, ele assume comportamentos diferentes. (Por exemplo, muda o formato da Data, muda o Ponto Decimal ou Vírgula Decimal, etc.) Mas uma coisa que as vezes passa &#8220;desapercebido&#8221; é que o NLS_LANG também pode mudar a ORDEM das colunas: <span id="more-11"></span></p>
<p>Exemplo: (Note a diferença)</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">SELECT</span> * <span class="kw1">FROM</span> A <span class="kw1">ORDER</span> <span class="kw1">BY</span> <span class="nu0">1</span>;<br />
<br />
F<br />
-<br />
<span class="nu0">1</span><br />
<span class="nu0">5</span><br />
A<br />
B<br />
C<br />
<br />
SQL&gt; <span class="kw1">ALTER</span> SESSION <span class="kw1">SET</span> NLS_LANGUAGE = <span class="st0">'PORTUGUESE'</span>;<br />
<br />
Session altered.<br />
<br />
SQL&gt; <span class="kw1">SELECT</span> * <span class="kw1">FROM</span> A <span class="kw1">ORDER</span> <span class="kw1">BY</span> <span class="nu0">1</span>;<br />
<br />
F<br />
-<br />
A<br />
B<br />
C<br />
<span class="nu0">1</span><br />
<span class="nu0">5</span></div></div>
<p>Como se pode ver, mudei de AMERICAN para PORTUGUESE e a ordem mudou! No primeiro caso, os números vieram primeiro. No segundo, os números ficaram por último. Como podemos nos certificar que uma coluna SEMPRE vai obedecer a mesma ordem ?<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8964513116661040";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
//2007-08-20: wp_meio
google_ad_channel = "1848816979";
google_color_border = "FFFFFF";
google_color_bg = "FFFFff";
google_color_link = "4F82CB";
google_color_text = "000000";
google_color_url = "4F82CB";
//-->
</script><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><strong>Solução 1</strong><br />
Pode se criar uma pequena função que indica se o campo é numérico ou não. Daí­, ordenamos primeiro pelo resultado dessa função. Lá vai:</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">CREATE</span> <span class="kw1">OR</span> <span class="kw1">REPLACE</span> <span class="kw1">FUNCTION</span> f_nro <span class="br0">&#40;</span> p_numero <span class="kw1">IN</span> varchar2 <span class="br0">&#41;</span> <span class="kw1">RETURN</span> number<br />
&nbsp; <span class="nu0">2</span>&nbsp; <span class="kw1">AS</span><br />
&nbsp; <span class="nu0">3</span>&nbsp; &nbsp; l_numero number;<br />
&nbsp; <span class="nu0">4</span>&nbsp; begin<br />
&nbsp; <span class="nu0">5</span>&nbsp; &nbsp; l_numero := to_number<span class="br0">&#40;</span>p_numero<span class="br0">&#41;</span>;<br />
&nbsp; <span class="nu0">6</span>&nbsp; &nbsp; <span class="kw1">RETURN</span> <span class="nu0">1</span>;<br />
&nbsp; <span class="nu0">7</span>&nbsp; exception when others then <span class="kw1">RETURN</span> <span class="nu0">0</span>;<br />
&nbsp; <span class="nu0">8</span>&nbsp; end;<br />
&nbsp; <span class="nu0">9</span>&nbsp; <br />
&nbsp;<span class="nu0">10</span>&nbsp; <br />
&nbsp;<span class="nu0">11</span>&nbsp; /<br />
<br />
<span class="kw1">FUNCTION</span> created.<br />
<br />
SQL&gt; <span class="kw1">SELECT</span> f_nro<span class="br0">&#40;</span><span class="st0">'1234'</span><span class="br0">&#41;</span> <span class="kw1">FROM</span> dual;<br />
<br />
F_NRO<span class="br0">&#40;</span><span class="st0">'1234'</span><span class="br0">&#41;</span><br />
<span class="co1">-------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">1</span><br />
<br />
<br />
SQL&gt; <span class="kw1">SELECT</span> f_nro<span class="br0">&#40;</span><span class="st0">'1234a'</span><span class="br0">&#41;</span> <span class="kw1">FROM</span> dual;<br />
<br />
F_NRO<span class="br0">&#40;</span><span class="st0">'1234A'</span><span class="br0">&#41;</span><br />
<span class="co1">--------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">0</span><br />
<br />
SQL&gt;</div></div>
<p>Veja&#8230; ela retorna ZERO se não é um número! Daí­ podemos ordenar desta forma:</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">ALTER</span> SESSION <span class="kw1">SET</span> NLS_LANGUAGE = <span class="st0">'PORTUGUESE'</span>;<br />
<br />
Session altered.<br />
<br />
SQL&gt;&nbsp; <span class="kw1">SELECT</span> * <span class="kw1">FROM</span> A <span class="kw1">ORDER</span> <span class="kw1">BY</span> <span class="nu0">1</span>;<br />
<br />
F<br />
-<br />
A<br />
B<br />
C<br />
<span class="nu0">1</span><br />
<span class="nu0">5</span><br />
<br />
SQL&gt; <span class="kw1">SELECT</span> * <span class="kw1">FROM</span> A <span class="kw1">ORDER</span> <span class="kw1">BY</span> f_nro<span class="br0">&#40;</span><span class="kw1">FIELD</span><span class="br0">&#41;</span> <span class="kw1">DESC</span>, <span class="kw1">FIELD</span>;<br />
<br />
F<br />
-<br />
<span class="nu0">5</span><br />
<span class="nu0">1</span><br />
A<br />
B<br />
C<br />
<br />
SQL&gt;</div></div>
<p>Voalá!!!</p>
<p><strong>Solução 2</strong><br />
É possí­vel usar a função DUMP. Exemplo:</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;">SQL&gt; <span class="kw1">SELECT</span> dump<span class="br0">&#40;</span><span class="st0">'A'</span><span class="br0">&#41;</span> <span class="kw1">FROM</span> dual;<br />
<br />
DUMP<span class="br0">&#40;</span><span class="st0">'A'</span><span class="br0">&#41;</span><br />
<span class="co1">----------------</span><br />
Typ=<span class="nu0">96</span> Len=<span class="nu0">1</span>: <span class="nu0">65</span><br />
<br />
SQL&gt; <span class="kw1">SELECT</span> * <span class="kw1">FROM</span> A <span class="kw1">ORDER</span> <span class="kw1">BY</span> dump<span class="br0">&#40;</span><span class="kw1">FIELD</span><span class="br0">&#41;</span>;<br />
<br />
F<br />
-<br />
<span class="nu0">1</span><br />
<span class="nu0">5</span><br />
A<br />
B<br />
C</div></div>
<p>Se tiver outras maneiraas, fique a vontade de postá-las <a href="http://glufke.net/oracle/viewtopic.php?p=7">aqui</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/09/06/order-by-muda-em-diferentes-nls_lang/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Comparação de Campos com NULL</title>
		<link>http://glufke.net/2007/09/06/comparacao-de-campos-com-null/</link>
		<comments>http://glufke.net/2007/09/06/comparacao-de-campos-com-null/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 13:34:52 +0000</pubDate>
		<dc:creator>dr_gori</dc:creator>
		
		<category><![CDATA[PL/SQL]]></category>

		<guid isPermaLink="false">http://glufke.net/2007/09/06/comparacao-de-campos-com-null/</guid>
		<description><![CDATA[Sabemos que quando um variável ou um campo no Oracle está NULL, ele não pode ser simplesmente comparado a um outro valor, pois o resultado da compração também será false!
DECLARE
&#160; a NUMBER:=NULL;
&#160; b NUMBER:=NULL;
BEGIN
&#160; IF a=b
&#160; THEN DBMS_OUTPUT.put_line&#40;'SIM'&#41;;
&#160; ELSE&#160; DBMS_OUTPUT.put_line&#40;'nao'&#41;;
&#160; END IF;
END;

SQL&#62; /
nao




POUCO EFICIENTE
Para &#8220;sanar&#8221; este problema, é possivel usar NVL, que não é uma [...]]]></description>
			<content:encoded><![CDATA[<p>Sabemos que quando um variável ou um campo no Oracle está NULL, ele não pode ser simplesmente comparado a um outro valor, pois o resultado da compração também será false!<span id="more-10"></span></p>
<div class="codecolorer-container plsql"><div class="codecolorer" style="font-family: monospace;"><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DECLARE"><span class="kw1">DECLARE</span></a><br />
&nbsp; a <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NUMBER"><span class="kw1">NUMBER</span></a>:=<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NULL"><span class="kw1">NULL</span></a>;<br />
&nbsp; b <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NUMBER"><span class="kw1">NUMBER</span></a>:=<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NULL"><span class="kw1">NULL</span></a>;<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> a=b<br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DBMS_OUTPUT"><span class="kw3">DBMS_OUTPUT</span></a>.put_line<span class="br0">&#40;</span><span class="st0">'SIM'</span><span class="br0">&#41;</span>;<br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSE"><span class="kw1">ELSE</span></a>&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=DBMS_OUTPUT"><span class="kw3">DBMS_OUTPUT</span></a>.put_line<span class="br0">&#40;</span><span class="st0">'nao'</span><span class="br0">&#41;</span>;<br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a>;<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a>;<br />
<br />
SQL&gt; /<br />
nao</div></div>
<p><script type="text/javascript"><!--
google_ad_client = "pub-8964513116661040";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
//2007-08-20: wp_meio
google_ad_channel = "1848816979";
google_color_border = "FFFFFF";
google_color_bg = "FFFFff";
google_color_link = "4F82CB";
google_color_text = "000000";
google_color_url = "4F82CB";
//-->
</script><br />
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><strong>POUCO EFICIENTE</strong><br />
Para &#8220;sanar&#8221; este problema, é possivel usar NVL, que não é uma boa prática. Veremos porque:</p>
<div class="codecolorer-container plsql"><div class="codecolorer" style="font-family: monospace;"><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NVL"><span class="kw2">NVL</span></a><span class="br0">&#40;</span>a, <span class="nu0">123456789</span><span class="br0">&#41;</span> = <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NVL"><span class="kw2">NVL</span></a><span class="br0">&#40;</span>b, <span class="nu0">123456789</span><span class="br0">&#41;</span><br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a> <span class="co1">--seu código</span></div></div>
<p>O exemplo acima até funciona se o valor for diferente de 123456789. Se o valor for igual, ferra a comparação!</p>
<p><strong>MUITO EFICIENTE</strong><br />
A melhor prática possível<br />
É um pouco trabalhosa, mas sempre funcionará:</p>
<div class="codecolorer-container plsql"><div class="codecolorer" style="font-family: monospace;"><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> a&lt;&gt;b<br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <span class="br0">&#40;</span>a <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NULL"><span class="kw1">NULL</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=AND"><span class="kw1">AND</span></a> b <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NOT"><span class="kw1">NOT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NULL"><span class="kw1">NULL</span></a><span class="br0">&#41;</span><br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <span class="br0">&#40;</span>a <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NOT"><span class="kw1">NOT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NULL"><span class="kw1">NULL</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=AND"><span class="kw1">AND</span></a> b <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=NULL"><span class="kw1">NULL</span></a><span class="br0">&#41;</span><br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a> <span class="co1">--seu codigo</span></div></div>
<p>Comente <a href="http://glufke.net/oracle/viewtopic.php?p=343">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glufke.net/2007/09/06/comparacao-de-campos-com-null/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
