Erro ORA-01427

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
danilo_zg
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qui, 04 Mar 2010 9:30 am
Localização: Jundiaí - SP

Estou tentando utilizar um select que retorna o seguinte erro:
ORA-01427 single-row subquery returns more than one row

Segue a consulta

Selecionar tudo

select 
       case when c.fisjur in 'F' then 
         (SELECT f.cpf from fat_pessoa_fisica f)
        else 
         (SELECT to_number(j.cgc) from fat_pessoa_juridica j)
        end CPF_CNPJ
from fat_cliente c 
O que estaria ocasionando este erro? :shock:
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

O que estaria ocasionando este erro é a falta de entendimento do subselect. :P.

Quando você faz no lugar do campo da tabela:

Selecionar tudo

case when c.fisjur in 'F' then
(SELECT f.cpf from fat_pessoa_fisica f)
você retorna TODAS as linhas da tabela onde deveria conter apenas UMA, a do select principal.
O select aguarda apenas um dado e você retorna TODO CONJUNTO de dados da tabela, aparecendo o "returns more than one row"(Retorna mais do que uma linha).

O que você deve fazer é garantir que o seu subselect contenha apenas a linha desejada, passando a chave ou id referência. Como:

Selecionar tudo

select
case when c.fisjur in 'F' then
(SELECT f.cpf from fat_pessoa_fisica f where f.cliente_id = c.cliente_id)
else
(SELECT to_number(j.cgc) from fat_pessoa_juridica j where j.cliente_id = c.cliente_id)
end CPF_CNPJ
from fat_cliente c
danilo_zg
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Qui, 04 Mar 2010 9:30 am
Localização: Jundiaí - SP

Noctifero, muito obrigado pela ajuda meu amigo. :mrgreen:
Agora o erro fez sentido pra mim. :idea:
Responder
  • Informação