Oracle erro ORA-01403

1 resposta
ECO2004

Estou tendo o seguinte erro quando executo uma procedure em meu banco de dados:

ORA-01403 - Dados não encontrados
ORA-06512 - em INSERIR linha 18

Eis minha tabela:

NOME  NOT NULL VARCHAR2(20 CHAR)
SOBRENOME NOT NULL VARCHAR2(50 CHAR)
CPF        NOT NULL VARCHAR2(11 CHAR)
DATANASCIMENTO NOT NULL DATE      
ENDEREÇO          VARCHAR2(50 CHAR)
SEXO     NOT NULL CHAR(1 CHAR)
SALARIO NOT NULL NUMBER(7,2)
CPF_SUPERVISOR          VARCHAR2(11 CHAR)
DNR               NUMBER

Eis minha procedure:

create or replace
procedure inserir(
  nome IN fun.nome%TYPE,
  sobrenome IN fun.sobrenome%TYPE,
  cadastro_pessoa_fisica IN fun.cpf%TYPE,
  datanascimento IN fun.datanascimento%TYPE,
  endereco IN fun.endereço%TYPE,
  sexo IN fun.sexo%TYPE,
  salario IN fun.salario%TYPE,
  cpf_supervisor IN fun.cpf_supervisor%TYPE,
  dnr IN fun.cpf_supervisor%TYPE) is
 
  cpf_existente varchar2(11);
  erro exception;
 
begin

  select cpf into cpf_existente  from funcionario where cadastro_pessoa_fisica = cpf;
  dbms_output.put_line('CPF: '||cpf_existente);
 
    if cpf_existente is not null then
         raise erro;
    else
        insert into fun values(nome, sobrenome, cadastro_pessoa_fisica, datanascimento, endereco, sexo, salario, cpf_supervisor, dnr);
        dbms_output.put_line('Funcionário inserido com sucesso!');
   end if; 
 
exception
  when erro then
    dbms_output.put_line('CPF já existente!');
   
end;

Alguém me ajuda?

1 Resposta

MiltonBastos

MUITO simples! A mensagem de erro já diz tudo.

Na linha 18 vc faz um SELECT. Este select não está retornando NENHUMA linha:

select cpf into cpf_existente from funcionario where cadastro_pessoa_fisica = cpf;

Numa store procedure isso não pode acontecer. Se não retornar nenhuma linha, vai dar erro.

Para verificar ANTES, vc pode fazer um SELECT COUNT pra ver quantos registros seu select vai retornar…
Depois faz um IF… se o resultado do count for 0 (zero), vc não roda o select). Se for 1, daí vc roda normalmente.

Criado 12 de setembro de 2013
Ultima resposta 23 de set. de 2013
Respostas 1
Participantes 2