Loop fácil em PL/SQL
18/janeiro/2012 - Oracle
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
— A variavel armazena cada linha retornada pelo select.
for variavel in ( select a.nome
from tab_cliente a
where a.idade >= 18) loop
— Faz alguma coisa com a variavel.
pro_teste(‘maior_idade’ , variavel.nome);
end loop;
end;
Erro JDBC – Io exception: NL Exception was generated
14/setembro/2011 - Java, Oracle
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 “)”.
Abaixo string que funciona sem problemas:
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)))
portanto quando ocorrer esse erro verifique sua string nos mínimos detalhes.
Até mais,
Fatorial com Oracle SQL
05/julho/2011 - Oracle
Olá
Abaixo um SQL diferente que calcula o fatorial de um número
with fatorial as
(select level idx from dual connect by level <= 15)
select idx, exp( sum( ln(idx) ) over (order by idx) ) fact
from fatorial
Resultado:

Resultado da query
Eu achei interessante, pois alguns comandos ali eu nunca tinha visto apesar de trabalhar a bastante tempo com Oracle DB.
Até mais.
ORA-01722: invalid number
13/março/2011 - Oracle
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 é inteiro .
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.
Vamos usar a simples query abaixo para demonstrar o problema
select to_number('3.1415', '9D9999'), 1/2 from dual;
Rode a query abaixo para saber as configurações da sessão atual.
select *
from v$nls_parameters
where parameter in
('NLS_LANGUAGE', 'NLS_CHARACTERSET');
Se retornar isso:
PARAMETER VALUE 1 NLS_LANGUAGE BRAZILIAN PORTUGUESE 2 NLS_CHARACTERSET WE8ISO8859P1
A query de exemplo vai retornar erro: ORA-01722: invalid number
SQL> select to_number('3.1415', '9D9999'), 1/2 from dual;
select to_number('3.1415', '9D9999'), 1/2 from dual
*
ERROR at line 1:
ORA-01722: invalid number
Se trocarmos o ponto pela vírgula vai funcionar perfeitamente
SQL> select to_number('3,1415', '9D9999'), 1/2 from dual;
TO_NUMBER('3,1415','9D9999') 1/2
---------------------------- ----------
3,1415 ,5
Para funcionar com ponto, o NLS_LANG deve ser o AMERICAN_AMERICA.WE8ISO8859P1, mostrado abaixo:
PARAMETER VALUE 1 NLS_LANGUAGE AMERICAN 2 NLS_CHARACTERSET WE8ISO8859P1
Desse forma se usarmos o ponto vai funcionar.
SQL> select to_number('3.1415', '9D9999'), 1/2 from dual
2 ;
TO_NUMBER('3.1415','9D9999') 1/2
---------------------------- ----------
3.1415 .5
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.
Para alterar esse comportamento no linux basta usar o export para criar a variável NLS_LANG
export NLS_LANG="BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1" export NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1"
No windows 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.
Até mais,
JasperReports com Oracle ADF
07/dezembro/2010 - Java, Oracle
Olá
Escrevo este post para deixar uma dica para quem precisa integrar ADF com JasperReports. No blog GEBS foi publicado um artigo sobre esse tema com direito a exemplo para download.
Veja o artigo clicando no link a seguir: http://www.gebs.ro/blog/oracle/jasper-reports-in-adf/
Até mais
Roberto
