Oracle e suas peripécias

22/outubro/2010 - Oracle

Olá

Hoje o Oracle me deu um baile, como faço todos os dias, estava eu tranquilo fazendo minha procedure PL/SQL quando de repente começo a obter esse erro:

LINE/COL ERROR
-------- ------------------------------------------
167/17   PL/SQL: ORA-00984: column not allowed here
160/7    PL/SQL: SQL Statement ignored

Olho aqui, olho lá, leio e releio as linha indicadas mas nada de ter uma luz para resolver esse problema. Resolvo criar o teste no PLSQL Developer (ver abaixo) com o trecho em torno da linha 167 mas o erro continua:

declare
  -- Local variables here
  i integer;
  --num_iden number;
  --num_cli number;
begin
  -- Test statements here
  insert into cad_endereco
    (num_cli_ende,
     cod_ende_ende,
     num_iden_ende,
     cod_ende_ende,
     cod_situ_ende,
     data_ende,
     usu_ende)
  values
    (num_cli,
     '0001',
     num_iden,
     '0001',
     'EN',
     '01',
     sysdate,
     user);
end;

Como o quantidade de código diminui e o scroolbar sumiu percebi que as variáveis num_cli e num_iden não estavam declaradas, lógico que não iria funcionar.
Visto isso, criei as benditas variáveis (no código acima estão comentadas). E não é que funcionou!!!

Poxa vida!! Não dava para me mostrar uma mensagem mais intuitiva do tipo a variável num_cli não está criada seu idiota??!! Mas com um column not allowed here é pra acabar com o meu dia. Já vi erro cuja mensagens não era assim uma beleza, mas essa ganhou disparado.

[desabafo mode="off"]

Até mais,
Roberto

Olá!

Caso você tem instalado um banco de dados Oracle 10g XE e não se lembra mais da senha do usuário SYS siga os passos abaixo para alterar a senha dele.

1) Abra o SQL*Plus. No botão iniciar escolha a opção “Executar Linha de Comandos SQL”;
2) Conecte-se com o comando abaixo:
SQL> connect / as sysdba
Conectado.

3) Altere a senha do usuário
SQL> alter user sys identified by ;
Usuário alterado.

Pronto. Agora você poderá acessar http://127.0.0.1:8080/apex/, digitar o usuário sys e a e ter o controle de volta do banco sem ter que reinstalá-lo.

Até mais,
Roberto

IsNumber em Oracle PL/SQL

05/fevereiro/2010 - Oracle

Olá

Existem duas formas de verificar se uma string contém um número válido. A primeira forma é usando as funções translate, trim e length. Quando usadas em conjunto você obtém null se a string for número ou o comprimento da string sem espaços em branco. Veja abaixo:

 select

length(trim(translate('minha_variavel', ' +-0123456789.', ' '))) n1,

length(trim(translate('123456789.9999', ' +-0123456789.', ' '))) n2

from dual;

O resultado dessa query é:

N1    N2
14    null

Outra forma é usando a função to_number().  Caso a string passada contiver caracteres não numéricos é lançada uma exceção.


declare
n number;
s varchar2(10);
begin
s :=  '1236';
n :=  to_number(s);
dbms_output.put_line('É número');
exception when others then
dbms_output.put_line('Não é número');
end;

Olá!

Para quem quer saber um pouco mais sobre BPEL e a ferramenta Oracle SOA Suite escrevi um artigo sobre eles.

Introdução ao BPEL utilizando o Oracle SOA Suíte 10g

Disponibilizei o web service utilizado no artigo nesse endereço http://www.furutani.com.br/CalculadoraServices/services/Calculadora?wsdl

Os fontes podem ser baixados clicando em CalculadoraServices.war e aqui.

Espero que ajude.

Até mais,
Roberto

Olá

Sabia que há a possibilidade de passar um objeto Java para dentro de uma procedure ou function do Oracle ?

Dica do blog do André LS.

Até mais,
Roberto