Oracle erro ORA-01403

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:

[code]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;[/code]

Alguém me ajuda?

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.

1 curtida