<?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; Order By</title>
	<atom:link href="http://glufke.net/tag/order-by/feed/" rel="self" type="application/rss+xml" />
	<link>http://glufke.net</link>
	<description></description>
	<lastBuildDate>Mon, 16 Apr 2012 19:33:42 +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>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>glufke</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Curiosidade]]></category>
		<category><![CDATA[Order By]]></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 despercebido é que o NLS_LANG também pode mudar a ORDEM das colunas: 
Exemplo: (Note a diferença)

SQL> SELECT * FROM A ORDER BY [...]]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="">
			<div style="float:left; width:50px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fglufke.net%2F2007%2F09%2F06%2Forder-by-muda-em-diferentes-nls_lang%2F&amp;layout=button_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:50px; height:21px;"></iframe></div>
			<div style="float:left; width:60px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://glufke.net/2007/09/06/order-by-muda-em-diferentes-nls_lang/"></g:plusone>
			</div>
			<div style="float:left; width:70px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://glufke.net/2007/09/06/order-by-muda-em-diferentes-nls_lang/"  data-text="Order By muda em diferentes NLS_LANG" data-count="horizontal" data-via="glufke"></a>
			</div><div style="float:left; width:110px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;"><script type="in/share" data-url="http://glufke.net/2007/09/06/order-by-muda-em-diferentes-nls_lang/" data-counter="right"></script></div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><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 despercebido é 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>
<pre class="brush: sql;">
SQL> SELECT * FROM A ORDER BY 1;

F
-
1
5
A
B
C

SQL> ALTER SESSION SET NLS_LANGUAGE = 'PORTUGUESE';

Session altered.

SQL> SELECT * FROM A ORDER BY 1;

F
-
A
B
C
1
5
</pre>
<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, mesmo se o NLS_LANG for diferente ?</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><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>
<pre class="brush: sql;">
SQL> create or replace Function f_nro ( p_numero in varchar2 ) return number
  2  as
  3    l_numero number;
  4  begin
  5    l_numero := to_number(p_numero);
  6    return 1;
  7  exception when others then return 0;
  8  end;
  9
 10
 11  /

Function created.

SQL> select f_nro('1234') from dual;

F_NRO('1234')
-------------
              1

SQL> select f_nro('1234a') from dual;

F_NRO('1234A')
--------------
             0

SQL>
</pre>
<p>Veja&#8230; ela retorna ZERO se não é um número! Daí­ podemos ordenar desta forma:</p>
<pre class="brush: sql;">
SQL> ALTER SESSION SET NLS_LANGUAGE = 'PORTUGUESE';

Session altered.

SQL>  SELECT * FROM A ORDER BY 1;

F
-
A
B
C
1
5

SQL> SELECT * FROM A ORDER BY f_nro(FIELD) desc, field;

F
-
5
1
A
B
C

SQL>
</pre>
<p>Voalá!!!</p>
<p><strong>Solução 2</strong><br />
É possí­vel usar a função DUMP. Exemplo:</p>
<pre class="brush: sql;">
SQL> select dump('A') from dual;

DUMP('A')
----------------
Typ=96 Len=1: 65

SQL> SELECT * FROM A ORDER BY dump(FIELD);

F
-
1
5
A
B
C
</pre>
<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>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

