Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Cross Segmentos - Backoffice RM - BI - Erros referentes a SUBQUERY ao executar relatórios no Reports

time.png Tempo aproximado para leitura: 00:03:00 min

Dúvida
Qual o significado dos erros abaixo referentes a SUBQUERY ao gerar relatórios no Reports?

ORA-01427: single-row subquery returns more than one row

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.





 

Ambiente
Cross Segmentos - TOTVS Backoffice (Linha RM) - RM BI - Todas as versões

 

Solução

ORA-01427: single-row subquery returns more than one row ocorre quando uma subquery 

Subconsulta usada em um contexto que espera um único valor retorna múltiplas linhas. Isso normalmente acontece em cláusulas como WHERE, SELECT, ou SET quando um valor único é esperado.

Exemplos de causas comuns:

Erro - Subquery Retornando Múltiplas Linhas

SELECT nome, (SELECT cidade FROM clientes) FROM pedidos;

Se a subquery SELECT cidade FROM clientes retornar mais de uma linha, o erro ocorre.

Solução - Use LIMIT 1 (se aplicável) ou funções como MIN(), MAX(), ou AVG() para garantir um único valor

SELECT nome, (SELECT MIN(cidade) FROM clientes) FROM pedidos;

Ou reformule a consulta para um JOIN:

SELECT p.nome, c.cidade FROM pedidos p JOIN clientes c ON p.cliente_id = c.id;

 

Uso indevido em Cláusula WHERE:


Erro - Se mais de um cliente da cidade de São Paulo existir, o erro ocorre.
SELECT * FROM pedidos WHERE cliente_id = (SELECT id FROM clientes WHERE cidade = 'São Paulo');

Solução - Use IN se várias linhas forem esperadas

SELECT * FROM pedidos WHERE cliente_id IN (SELECT id FROM clientes WHERE cidade = 'São Paulo');

Ou restrinja a subquery para retornar apenas uma linha

SELECT * FROM pedidos WHERE cliente_id = 
(SELECT id FROM clientes WHERE cidade = 'São Paulo' AND ROWNUM = 1);

Conclusão
Sempre garanta que sua subquery retorne apenas um único valor quando necessário. Se houver múltiplos valores:
Use agregações (MIN(), MAX(), AVG())
Utilize IN em vez de =
Limite os resultados (ROWNUM = 1 ou FETCH FIRST 1 ROW ONLY)
Reescreva a consulta com JOIN

 

Subquery returned more than 1 value

Esse erro ocorre porque uma subquery (subconsulta) está retornando mais de um valor, mas a consulta principal espera apenas um único valor.

Exemplos de causas comuns:

1. Subquery usada com = ao invés de IN
Se sua subquery retorna múltiplos valores, mas está sendo usada com = (que espera um único valor), ocorre o erro.

Erro - Se houver mais de um cliente em São Paulo, a subquery falha.
SELECT * FROM pedidos WHERE cliente_id = 
(SELECT cliente_id FROM clientes WHERE cidade = 'São Paulo');

 

Solução (Usar IN em vez de =)
SELECT * FROM pedidos WHERE cliente_id IN 
(SELECT cliente_id FROM clientes WHERE cidade = 'São Paulo');


 2 . Subquery usada em um SELECT escalar
Se a subquery retorna vários valores dentro de um SELECT, ocorre erro.

Erro - Se um cliente tiver mais de uma cidade, a subquery falha.

SELECT nome, 
(SELECT cidade FROM clientes WHERE clientes.id = pedidos.cliente_id) AS cidade_cliente
FROM pedidos;

Solução1  (Limitar a subquery a um único valor)SELECT nome, 
(SELECT cidade FROM clientes WHERE clientes.id = pedidos.cliente_id LIMIT 1) AS cidade_cliente
FROM pedidos;

Solução2 (Usar JOIN em vez de subquery)SELECT pedidos.nome, clientes.cidade 
FROM pedidos
JOIN clientes ON pedidos.cliente_id = clientes.id;

Solução3. Subquery sem agregação retornando múltiplos valores
Se a subquery deveria retornar um único valor mas não está agregando os dados corretamente, ela pode falhar.


 Erro - Se houver vários produtos na categoria "Eletrônicos", a subquery falha.

SELECT (SELECT preco FROM produtos WHERE categoria = 'Eletrônicos') AS preco;

 

.

Solução1 (Usar função de agregação)
SELECT (SELECT MAX(preco) FROM produtos WHERE categoria = 'Eletrônicos') AS preco_mais_alto;
ou
SELECT (SELECT AVG(preco) FROM produtos WHERE categoria = 'Eletrônicos') AS preco_medio;


Solução2 Subquery mal estruturada
Às vezes, a estrutura da subquery está errada e precisa ser reformulada.


Erro - Se um produto_id estiver em múltiplas categorias, a subquery falha.

SELECT nome, 
(SELECT categoria FROM produtos WHERE produtos.id = pedidos.produto_id) AS categoria_produto
FROM pedidos;

 

 Solução - (Usar JOIN)

SELECT pedidos.nome, produtos.categoria
FROM pedidos
JOIN produtos ON pedidos.produto_id = produtos.id;

Conclusão
✔ Use IN em vez de = quando a subquery retornar múltiplos valores.
✔ Use LIMIT 1 se precisar apenas de um resultado.
✔ Use funções agregadoras (MAX(), MIN(), SUM(), etc.) para reduzir os valores retornados.
✔ Substitua subqueries por JOIN sempre que possível para melhorar desempenho.

 

Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

0 Comentários

Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _