<?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>Roberto Furutani &#187; Roberto Furutani</title>
	<atom:link href="http://www.furutani.com.br/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.furutani.com.br</link>
	<description>O site de um computólogo curioso!</description>
	<lastBuildDate>Fri, 20 Jan 2012 00:25:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Loop fácil em PL/SQL</title>
		<link>http://www.furutani.com.br/2012/01/loop-facil-em-plsql/</link>
		<comments>http://www.furutani.com.br/2012/01/loop-facil-em-plsql/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 20:59:57 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[plsql]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=782</guid>
		<description><![CDATA[Olá! Dica rápida: Eu não conhecia a sintaxe do for abaixo, resolvi compartilhar. Não precisa declarar cursor nem dar open, fetch e close. begin &#8212; A variavel armazena cada linha retornada pelo select. for variavel in ( select a.nome from tab_cliente a where a.idade >= 18) loop &#8212; Faz alguma coisa com a variavel. pro_teste(&#8216;maior_idade&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Olá!</p>
<p>Dica rápida: Eu não conhecia a sintaxe do <strong>for</strong> abaixo, resolvi compartilhar. Não precisa declarar cursor nem dar open, fetch e close. <br />
<br/></p>
<p>begin</p>
<p>  &#8212; A variavel armazena cada linha retornada pelo select.<br />
  for variavel in ( select a.nome<br />
                      from tab_cliente a<br />
                     where a.idade >= 18) loop</p>
<p>      &#8212; Faz alguma coisa com a variavel.<br />
      pro_teste(&#8216;maior_idade&#8217; , variavel.nome);  </p>
<p>  end loop;</p>
<p>end;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2012/01/loop-facil-em-plsql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>StickyGram</title>
		<link>http://www.furutani.com.br/2011/10/stickygram/</link>
		<comments>http://www.furutani.com.br/2011/10/stickygram/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 00:33:58 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Instagram]]></category>
		<category><![CDATA[StickyGram]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=776</guid>
		<description><![CDATA[Olá Mais um novo serviço baseado no querido Instagram, é o StickyGram. Este serviço imprime suas fotos publicadas no Instagram em imãs de 50mmx50mm por $14,99 a cartela com 9 e com frete grátis por airmail para todo o mundo. O pagamento é via PayPal. Eu já pedi um, vamos ver quanto tempo demora para [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p><img alt="" src="http://media0.stickygram.com/rel-8948cb2/images/stickygram-logo.png?0501983" title="stickygram" class="aligncenter" width="199" height="104" /></p>
<p>Mais um novo serviço baseado no querido <a href="http://instagram.com/" target="_blank">Instagram</a>, é o <a href="http://stickygram.com/" title="stickygram" target="_blank">StickyGram</a>.<br />
Este serviço imprime suas fotos publicadas no Instagram em imãs de 50mmx50mm por $14,99 a cartela com 9 e com frete grátis por airmail para todo o mundo.<br />
O pagamento é via PayPal.</p>
<p>Eu já pedi um, vamos ver quanto tempo demora para chegar.</p>
<p>Até mais,<br />
Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/10/stickygram/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erro JDBC &#8211; Io exception: NL Exception was generated</title>
		<link>http://www.furutani.com.br/2011/09/erro-jdbc-io-exception-nl-exception-was-generated/</link>
		<comments>http://www.furutani.com.br/2011/09/erro-jdbc-io-exception-nl-exception-was-generated/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 12:13:21 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=768</guid>
		<description><![CDATA[Olá Hoje me deparei com um erro diferente ao tentar conectar ao banco de dados Oracle numa aplicação Java. Caused by: java.sql.SQLException: Io exception: NL Exception was generated Depois de algumas analises verifiquei que a string de conexão estava errada: jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(FAILOVER=on)(ADDRESS_LIST=(ADDRESS=(protocol=tcp)(host=198.31.10.51)(port=1521))(ADDRESS=(protocol=tcp)(host=198.31.10.50)(port=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=meu_banco)) No final da string faltou um fecha parênteses &#8220;)&#8221;. Abaixo string que funciona sem [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Hoje me deparei com um erro diferente ao tentar conectar ao banco de dados Oracle numa aplicação Java.</p>
<pre><em><strong>Caused by: java.sql.SQLException: Io exception: NL Exception was generated</strong></em></pre>
<p>Depois de algumas analises verifiquei que a string de conexão estava errada:</p>
<pre class="brush: php">

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(FAILOVER=on)(ADDRESS_LIST=(ADDRESS=(protocol=tcp)(host=198.31.10.51)(port=1521))(ADDRESS=(protocol=tcp)(host=198.31.10.50)(port=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=meu_banco))</pre>
<p>No final da string faltou um fecha parênteses &#8220;)&#8221;.</p>
<p>Abaixo string que funciona sem problemas:</p>
<pre class="brush: php">

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(FAILOVER=on)(ADDRESS_LIST=(ADDRESS=(protocol=tcp)(host=198.31.10.51)(port=1521))(ADDRESS=(protocol=tcp)(host=198.31.10.50)(port=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=meu_banco)))</pre>
<p>portanto quando ocorrer esse erro verifique sua string nos mínimos detalhes.</p>
<p>Até mais,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/09/erro-jdbc-io-exception-nl-exception-was-generated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instagram</title>
		<link>http://www.furutani.com.br/2011/09/instagram/</link>
		<comments>http://www.furutani.com.br/2011/09/instagram/#comments</comments>
		<pubDate>Sun, 04 Sep 2011 01:44:11 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Instagram]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=764</guid>
		<description><![CDATA[Olá, Deixarei aqui alguns sites muito úteis para usuários do Instagram. &#160; &#160; Inkstagram &#8211; Site para visualizar fotos do Instagram, é possível dar likes, ver as fotos populares além de ver sua timeline de fotos; Statigram -É um pouco mais completo que o anterior. Oferece estatísticas sobre suas fotos, os filtros mais usados, os [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Deixarei aqui alguns sites muito úteis para usuários do Instagram.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="http://www.furutani.com.br/wp-content/uploads/2011/09/Instagram.png"><img class="aligncenter size-medium wp-image-765" title="Instagram" src="http://www.furutani.com.br/wp-content/uploads/2011/09/Instagram-300x300.png" alt="" width="210" height="210" /></a></p>
<p>&nbsp;</p>
<p><a href="http://inkstagram.com/">Inkstagram</a> &#8211; Site para visualizar fotos do Instagram, é possível dar likes, ver as fotos populares além de ver sua timeline de fotos;</p>
<p><a href="statigr.am">Statigram</a> -É um pouco mais completo que o anterior. Oferece estatísticas sobre suas fotos, os filtros mais usados, os dias da semana em que fotos são postadas. Possibilita enviar mensagens entre os usuários do Statigram;</p>
<p><a href="http://instaearth.me/">Instaearth.me</a> &#8211; Mostra as fotos no mapa;</p>
<p><a href="http://www.mapstagram.com/">Mapstagram</a> &#8211; Outro site para ver as fotos no mapa;</p>
<p><a href="http://instac.at/">Instac.at</a> &#8211; agregador de fotos de gatos;</p>
<p><a href="http://instapuppy.com/">InstaPuppy</a> &#8211; agregador de fotos de cachorros;</p>
<p><a href="http://instaport.me/">Instaport</a> &#8211; Site para baixar todas suas fotos em um arquivo zip.</p>
<p>&nbsp;</p>
<p>Até mais,</p>
<p>Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/09/instagram/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trabalhando com arquivos no Java 7</title>
		<link>http://www.furutani.com.br/2011/08/trabalhando-com-arquivos-no-java-7/</link>
		<comments>http://www.furutani.com.br/2011/08/trabalhando-com-arquivos-no-java-7/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 00:10:23 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java7]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=757</guid>
		<description><![CDATA[Olá Trabalhar com arquivos no Java7 ficou muito mais fácil com a introdução da classe java.nio.file.Files. Com esta classe copiar, mover, apagar e outras operações básicas ficaram muito simples. A seguir veremos alguns exemplos: O trecho abaixo obtém o sistemas de arquivos padrão acessível pela JVM. FileSystem defaultFS = FileSystems.getDefault(); Agora criamos um objeto da [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Trabalhar com arquivos no Java7 ficou muito mais fácil com a introdução da classe <a href="http://download.oracle.com/javase/7/docs/api/java/nio/file/Files.html" title="link" target="_blank">java.nio.file.Files</a>. Com esta classe copiar, mover, apagar e outras operações básicas ficaram muito simples.<br />
A seguir veremos alguns exemplos:<br />
O trecho abaixo obtém o sistemas de arquivos padrão acessível pela JVM.</p>
<pre class="brush: java"> FileSystem defaultFS = FileSystems.getDefault();</pre>
<p>Agora criamos um objeto da classe Path que representa o diretório D:\java</p>
<pre class="brush: java">Path basePath = defaultFS.getPath(&quot;D:\\&quot;, &quot;java&quot;); </pre>
<p>Os objetos Path podem referenciar diretórios e arquivos.</p>
<pre class="brush: java">Path temp1 = basePath.resolve(&quot;temp1&quot;+
              File.separator + &quot;meu_arquivo.txt&quot;);
			Path temp2 = basePath.resolve(&quot;temp2&quot;);</pre>
<p>Usamos a classe Files para criar o diretório com o método estático createDirectories()</p>
<pre class="brush: java">Files.createDirectories(temp2); </pre>
<p>Abaixo copiamos o arquivo para outro diretório substituindo caso exista.</p>
<pre class="brush: java">Files.copy(temp1, temp2,
                StandardCopyOption.REPLACE_EXISTING ); </pre>
<p>Para move o arquivo para outro diretório substituindo caso exista usamos o código abaixo.</p>
<pre class="brush: java">Files.move(temp1, temp3.resolve(&quot;fim.txt&quot;),
                StandardCopyOption.REPLACE_EXISTING); </pre>
<p>Para saber se o arquivo existe</p>
<pre class="brush: java">System.out.println(&quot;File exists &quot; + Files.exists(temp1)); </pre>
<p>Mostramos o tamanho do arquivo em bytes</p>
<pre class="brush: java">System.out.println(Files.size(temp2) + &quot; bytes&quot;); </pre>
<p>O código abaixo lista os diretórios raízes, no windows retornaria C:\, D:\, E:\ etc.</p>
<pre class="brush: java">FileSystem defaultFS = FileSystems.getDefault();
		Iterable&lt;Path&gt; rootDirectories = defaultFS.getRootDirectories();

		for(Path pth : rootDirectories){
			System.out.println(pth.toString());
		}</pre>
<p>Para mim a API foi bem escrita, é bem auto-explicativa.<br />
Por enquanto minha ressalva é quanto as permissões no padrão POSIX, achei elas complicadas de serem aplicadas.</p>
<p>Antes de ter a classe Files para copiar um arquivo geralmente faríamos:</p>
<pre class="brush: java">FileInputStream in =
                 new FileInputStream(&quot;D:\arquivo.txt&quot;);
            FileOutputStream out = new FileOutputStream(&quot;D:\destino.txt&quot;);
            byte[] buf = new byte[1024];
            int i = 0;
            while ((i = in.read(buf)) != -1) {
                out.write(buf, 0, i);
            }
            in.close();
            out.close(); </pre>
<p>No Java 7 não precisa dar close nos recursos que implementam java.lang.AutoCloseable. Assim você não corre mais riscos de esquece preso um recurso.</p>
<p>Até mais,<br />
Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/08/trabalhando-com-arquivos-no-java-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java7 &#8211; Switch com String e multi-catch</title>
		<link>http://www.furutani.com.br/2011/08/java7-switch-com-string-e-multi-catch/</link>
		<comments>http://www.furutani.com.br/2011/08/java7-switch-com-string-e-multi-catch/#comments</comments>
		<pubDate>Sun, 21 Aug 2011 23:41:29 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java7]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=753</guid>
		<description><![CDATA[Olá, Instalei o Java 7 para testar alguns novos recursos. Link para download Vamos aos dois mais básicos, porém muito úteis. 1. switch Agora no Java 7 é possível fazer switch de Strings. Como sempre, o comando é case-sensitive. public class Java7 { public static void main(String [] args){ String cor = &#34;azul&#34;; switch(cor){ case [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Instalei o Java 7 para testar alguns novos recursos.<br />
<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" title="link" target="_blank">Link para download</a></p>
<p>Vamos aos dois mais básicos, porém muito úteis.</p>
<p><strong>1. switch</strong><br />
Agora no Java 7 é possível fazer switch de Strings.<br />
Como sempre, o comando é case-sensitive.</p>
<pre class="brush: java">
public class Java7 {

	public static void main(String [] args){

	  String cor = &quot;azul&quot;;

	  switch(cor){

		  case &quot;verde&quot;:
		  System.out.println(&quot;Cor verde&quot;);
		  break;

		  case &quot;amarelo&quot;:
		  System.out.println(&quot;Cor amarelo&quot;);
		  break;

		  case &quot;azul&quot;:
		  System.out.println(&quot;Cor azul&quot;);
		  break;

		  case &quot;Azul&quot;:
		  System.out.println(&quot;Cor Azul&quot;);
		  break;

		  default:
		  System.out.println(&quot;Cor indefinida&quot;);
		  break;
	  }
	}
}
</pre>
<p>Nesse exemplo a saída seria: Cor azul</p>
<p><strong>2. catch múltiplos</strong><br />
Nessa versão é possível com uma única declaração de catch &#8220;pegar&#8221; várias exceções.<br />
Basta separar as exceções por pipe &#8220;|&#8221;.</p>
<pre class="brush: java">
import java.io.*;

public class Java7 {
	public static void main(String [] args){
		try {
			 FileInputStream fis = new FileInputStream(&quot;arquivo.txt&quot;);

			 DataInputStream dis = new DataInputStream(fis);
			 BufferedReader br = new BufferedReader(new InputStreamReader(dis, &quot;UTF-8&quot;));
			 String linha;

			  while ((linha = br.readLine()) != null){
				System.out.println (linha);
			  }			

		} catch(IOException | NullPointerException exc){
		  System.out.println(&quot;Deu erro &quot; + exc);
		}
	}
}
</pre>
<p>As exceções declaradas no catch não podem ser mãe e filha (subclasse).<br />
Se por exemplo declarássemos:</p>
<pre class="brush: java">catch(IOException | FileNotFoundException | UnsupportedEncodingException exc)</pre>
<p>Teríamos o seguinte erro na compilação:</p>
<pre class="brush: php">
Java7.java:16: error: Alternatives in a multi-catch statement cannot be related
by subclassing
                } catch(IOException | FileNotFoundException | UnsupportedEncodin
gException exc){
                                      ^
  Alternative FileNotFoundException is a subclass of alternative IOException
Java7.java:16: error: Alternatives in a multi-catch statement cannot be related
by subclassing
                } catch(IOException | FileNotFoundException | UnsupportedEncodin
gException exc){
                                                              ^
  Alternative UnsupportedEncodingException is a subclass of alternative IOExcept
ion
2 errors
</pre>
<p>até mais,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/08/java7-switch-com-string-e-multi-catch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cuidado com parse de String para Date</title>
		<link>http://www.furutani.com.br/2011/08/cuidado-com-parse-de-string-para-date/</link>
		<comments>http://www.furutani.com.br/2011/08/cuidado-com-parse-de-string-para-date/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 00:12:48 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[SimpleDateFormat]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=744</guid>
		<description><![CDATA[Olá Esse post é só uma dica para você que usa o SimpleDateFormat para converter String em Date. Não sei por que razão (para falar a verdade também não pesquisei) mas o SimpleDateFormat não lança uma exceção quando passamos um data que não existe no calendário. Por exemplo 31 de setembro e 32 de setembro. [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Esse post é só uma dica para você que usa o SimpleDateFormat para converter String em Date.<br />
Não sei por que razão (para falar a verdade também não pesquisei) mas o SimpleDateFormat não lança uma exceção quando passamos um data que não existe no calendário. Por exemplo 31 de setembro e 32 de setembro. Ele simplesmente converte para um dia do próximo mês.</p>
<p>Veja os exemplos abaixos:</p>
<pre class="brush: java">
    SimpleDateFormat sdf = new SimpleDateFormat(&quot;dd/MM/yyyy&quot;);
    System.out.println(sdf.parse(&quot;30/09/2011&quot;));
    System.out.println(sdf.parse(&quot;31/09/2011&quot;));
    System.out.println(sdf.parse(&quot;32/09/2011&quot;));

    // Saídas
    // Fri Sep 30 00:00:00 BRT 2011
    // Sat Oct 01 00:00:00 BRT 2011
    // Sun Oct 02 00:00:00 BRT 2011
</pre>
<p>Dica do Tadashi:<br />
Para validar a data use o método <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/text/DateFormat.html#setLenient(boolean)" title="setLenient" target="_blank">setLenient(false)</a></p>
<p>Dessa forma um ParseException será lançada!</p>
<p>Até mais,<br />
Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/08/cuidado-com-parse-de-string-para-date/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fatorial com Oracle SQL</title>
		<link>http://www.furutani.com.br/2011/07/fatorial-com-oracle-sql/</link>
		<comments>http://www.furutani.com.br/2011/07/fatorial-com-oracle-sql/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 21:50:44 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=739</guid>
		<description><![CDATA[Olá Abaixo um SQL diferente que calcula o fatorial de um número with fatorial as (select level idx from dual connect by level &#60;= 15) select idx, exp( sum( ln(idx) ) over (order by idx) ) fact from fatorial Resultado: Eu achei interessante, pois alguns comandos ali eu nunca tinha visto apesar de trabalhar a [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Abaixo um SQL diferente que calcula o fatorial de um número</p>
<pre class="brush: php">with fatorial as
    (select level idx from dual connect by level &lt;= 15)
    select idx, exp( sum( ln(idx) ) over (order by idx) ) fact
      from fatorial</pre>
<p>Resultado: <div class="wp-caption aligncenter" style="width: 532px"><img alt="Resultado da query" src="http://furutani.com.br/wp-content/uploads/2011/07/2011-07-05_134138.jpg" title="Resultado da query" width="522" height="479" /><p class="wp-caption-text">Resultado da query</p></div></p>
<p>Eu achei interessante, pois alguns comandos ali eu nunca tinha visto apesar de trabalhar a bastante tempo com Oracle DB.</p>
<p>Até mais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/07/fatorial-com-oracle-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORA-01722: invalid number</title>
		<link>http://www.furutani.com.br/2011/03/ora-01722-invalid-number/</link>
		<comments>http://www.furutani.com.br/2011/03/ora-01722-invalid-number/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 03:21:04 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=727</guid>
		<description><![CDATA[Olá, Se você usa o to_number() para converter varchar2 em number provavelmente já teve esse problema ou um dia terá. O problema aparenta ser simples quando tem uma variável varchar2 com caracteres estranhos no meio, mas e quando você tem certeza que o número esta certo. E quando to_number() funciona corretamente só quando o número [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Se você usa o <strong>to_number()</strong> para converter <strong>varchar2 </strong>em number provavelmente já teve esse problema ou um dia terá.<br />
O problema aparenta ser simples quando tem uma variável varchar2 com caracteres estranhos no meio, mas e quando você tem certeza que o número esta certo. E quando to_number() funciona corretamente só quando o número é inteiro .<br />
Essa dor de cabeça aparece quando tem o separador de decimal e/ou de milhar, que é diferente conforme a localização usada. Geralmente usamos o ponto, que é o normal para programadores. Mas o oracle pode te pegar de calças curtas.</p>
<p>Vamos usar a simples query abaixo para demonstrar o problema</p>
<pre class="brush: sql">select to_number(&#039;3.1415&#039;, &#039;9D9999&#039;), 1/2 from dual;</pre>
<p>Rode a query abaixo para saber as configurações da sessão atual.</p>
<pre class="brush: sql">
 select *
   from v$nls_parameters
  where parameter in
		(&#039;NLS_LANGUAGE&#039;, &#039;NLS_CHARACTERSET&#039;);
</pre>
<p>Se retornar isso:</p>
<pre class="brush: text">
   	PARAMETER	        VALUE
1	NLS_LANGUAGE	    BRAZILIAN PORTUGUESE
2	NLS_CHARACTERSET	WE8ISO8859P1
</pre>
<p>A query de exemplo vai retornar erro: ORA-01722: invalid number</p>
<pre class="brush: text">
SQL&gt; select  to_number(&#039;3.1415&#039;, &#039;9D9999&#039;), 1/2 from dual;
select  to_number(&#039;3.1415&#039;, &#039;9D9999&#039;), 1/2 from dual
                  *
ERROR at line 1:
ORA-01722: invalid number
</pre>
<p>Se trocarmos o ponto pela vírgula vai funcionar perfeitamente</p>
<pre class="brush: text">
SQL&gt;  select  to_number(&#039;3,1415&#039;, &#039;9D9999&#039;), 1/2 from dual;

TO_NUMBER(&#039;3,1415&#039;,&#039;9D9999&#039;)        1/2
---------------------------- ----------
                      3,1415         ,5
</pre>
<p>Para funcionar com ponto, o <strong>NLS_LANG</strong> deve ser o <strong>AMERICAN_AMERICA.WE8ISO8859P1</strong>, mostrado abaixo:</p>
<pre class="brush: text">
   	PARAMETER	        VALUE
1	NLS_LANGUAGE	    AMERICAN
2	NLS_CHARACTERSET	WE8ISO8859P1
</pre>
<p>Desse forma se usarmos o ponto vai funcionar.</p>
<pre class="brush: text">
SQL&gt; select  to_number(&#039;3.1415&#039;, &#039;9D9999&#039;), 1/2 from dual
  2  ;

TO_NUMBER(&#039;3.1415&#039;,&#039;9D9999&#039;)        1/2
---------------------------- ----------
                      3.1415         .5
</pre>
<p>Com esse post demonstrei que o cliente é que manda, não sei tem como o DBA travar isso, mas pelo menos nos bancos que eu acesso tem essa característica.</p>
<p>Para alterar esse comportamento no linux basta usar o <strong>export </strong>para criar a variável NLS_LANG</p>
<pre class="brush: text">
export NLS_LANG=&quot;BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1&quot;
export NLS_LANG=&quot;AMERICAN_AMERICA.WE8ISO8859P1&quot;
</pre>
<p>No <strong>windows </strong>vá nas propriedades do sistema, aba avançado e clique no botão variáveis de ambiente. Utilize o botão novo para criar uma nova variável, coloque no nome NLS_LANG e o valor que desejar.</p>
<p>Até mais,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/03/ora-01722-invalid-number/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lendo valores RGB de uma imagem com java</title>
		<link>http://www.furutani.com.br/2011/02/lendo-valores-rgb-de-uma-imagem-com-java/</link>
		<comments>http://www.furutani.com.br/2011/02/lendo-valores-rgb-de-uma-imagem-com-java/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 00:14:05 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=723</guid>
		<description><![CDATA[Olá Programinha para identificar valores RGB e gerar imagens pixel a pixel pelo valor RGB. import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.File; import java.io.IOException; import java.util.*; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.event.*; public class IdentificadorRGB extends JFrame implements MouseMotionListener { private JLabel l_imagem, l_red, l_green, l_blue, l_r, l_g, l_b; private BufferedImage imagem, img_red, img_blue, [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Programinha para identificar valores RGB e gerar imagens pixel a pixel pelo valor RGB. </p>
<pre class="brush: java">
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.event.*;  

public class IdentificadorRGB extends JFrame implements MouseMotionListener {  

   private JLabel l_imagem, l_red, l_green, l_blue, l_r, l_g, l_b;
   private BufferedImage imagem,
   img_red, img_blue, img_green;
   Container c;  

   IdentificadorRGB() {
      super(&quot;Identificador de valores RGB pixel a pixel&quot;);
      try {
         //Leitura da imagem do disco
         imagem = ImageIO.read(new File(&quot;imagem.png&quot;));
         img_blue = ImageIO.read(new File(&quot;imagem.png&quot;));
         img_red = ImageIO.read(new File(&quot;imagem.png&quot;));
         img_green = ImageIO.read(new File(&quot;imagem.png&quot;));
      } catch (IOException e) {
         e.printStackTrace();
      }
      getContentPane().setLayout(null);
      c = getContentPane();  

      l_r = new JLabel();
      l_r.setBounds(300, 0, 270, 185);
      c.add(l_r);  

      l_g = new JLabel();
      l_g.setBounds(300, 190, 270, 185);
      c.add(l_g);  

      l_b = new JLabel();
      l_b.setBounds(5, 245, 270, 185);
      c.add(l_b);  

      l_imagem = new JLabel();
      l_imagem.setIcon(new ImageIcon(imagem));
      l_imagem.setBounds(0, 0, 270, 185);
      c.add(l_imagem);  

      l_red = new JLabel();
      l_red.setText(&quot;R:&quot;);
      l_red.setBounds(5, 190, 100, 15);
      c.add(l_red);  

      l_green = new JLabel();
      l_green.setText(&quot;G:&quot;);
      l_green.setBounds(5, 210, 100, 15);
      c.add(l_green);  

      l_blue = new JLabel();
      l_blue.setText(&quot;B:&quot;);
      l_blue.setBounds(5, 225, 100, 15);
      c.add(l_blue);  

      WritableRaster raster = imagem.getRaster();
      int pixels[] = new int[4];
      for (int i = 0; i &lt; imagem.getWidth(); i++)
         for (int j = 0; j &lt; imagem.getHeight(); j++) {
            raster.getPixel(i, j, pixels);
            img_red.setRGB(i, j, setR(pixels[0] ));
            img_green.setRGB(i, j, setG(pixels[1] ));
            img_blue.setRGB(i, j, setB(pixels[2] ));  

         }  

      c.validate();
      l_r.setIcon(new ImageIcon(img_red));
      l_g.setIcon(new ImageIcon(img_green));
      l_b.setIcon(new ImageIcon(img_blue));
      addMouseMotionListener(this);
      setSize(600, 500);
      setResizable(false);
      show();
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

   }
   /* métodos que transforma valores inteiros do RGB para um numero hexadecimal
    *
    * Por exemplo 255,000,255  fica em hexadecimal 0x00FF00FF
    *
    * O dois primeiros 00 são valores do ALPHA que é responsavel pela
    * transparencia
    *     *
    */
   private int setR(int r) {
      return 0
         &lt;&lt; 24
            | ((r &lt;&lt; 16) &amp; 0x00FF0000)
            | ((0 &lt;&lt; 8 ) &amp; 0x0000FF00)
            | (0 &amp; 0x000000FF);
   }
   private int setG(int g) {
      return 0
         &lt;&lt; 24
            | ((0 &lt;&lt; 16) &amp; 0x00FF0000)
            | ((g &lt;&lt; 8 ) &amp; 0x0000FF00)
            | (0 &amp; 0x000000FF);
   }
   private int setB(int b) {
      return 0
         &lt;&lt; 24
            | ((0 &lt;&lt; 16) &amp; 0x00FF0000)
            | ((0 &lt;&lt; 8 ) &amp; 0x0000FF00)
            | (b &amp; 0x000000FF);
   }  

   public static void main(String[] args) {
      new IdentificadorRGB();
   }  

   public void mouseDragged(MouseEvent arg0) {
   }  

   public void mouseMoved(MouseEvent arg0) {  

      WritableRaster raster = imagem.getRaster();
      int pixels[] = new int[4];
      if (arg0.getX() &lt; imagem.getWidth()
         &amp;&amp; arg0.getY() &lt; imagem.getHeight()) {
         raster.getPixel(arg0.getX() - 3, arg0.getY() - 23, pixels);
         //Mostras os valores na tela
         l_red.setText(&quot;R: &quot; + pixels[0] );
         l_green.setText(&quot;G: &quot; + pixels[1] );
         l_blue.setText(&quot;B: &quot; + pixels[2] );
      }
   }  

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/02/lendo-valores-rgb-de-uma-imagem-com-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

