sql

Delphi

13/05/2005

Olá pessoal, o sql abaixo está retornando o seguinte erro: ORA-01427: single-row subquery returns more than one row, alguém sabe o significado??
O erro ocorreu a partir do momento que inseri esta parte dó código:
[i:05e42d782f] , (SELECT Numero
FROM ReferenciaNumeracao
WHERE NVL(cTitulo, NULL) = 200
AND cLargura = pec.cLargura
AND cGrade = pec.cGrade
AND cTipoFt = pec.cTipoFt
AND cRefer = pec.cRefer) Numero[/i:05e42d782f]

SELECT ped.cPessoaJur || ´ ´ || pes.Fantasia Cliente
, ped.IDLote
, pec.cRefer
, rec.Descricao
, ped.DataEntrega
, ped.Pedido
, ref.dRefer
[i:05e42d782f] , (SELECT Numero
FROM ReferenciaNumeracao
WHERE NVL(cTitulo, NULL) = 200
AND cLargura = pec.cLargura
AND cGrade = pec.cGrade
AND cTipoFt = pec.cTipoFt
AND cRefer = pec.cRefer) Numero[/i:05e42d782f]
, (SELECT TextoTecnico
FROM v_FichaTecnica
WHERE NVL(cTitulo, NULL) = 32250
AND SeqCombFt = pec.SeqCombFt
AND cLargura = pec.cLargura
AND cGrade = pec.cGrade
AND cTipoFt = pec.cTipoFt
AND cRefer = pec.cRefer) StockNumber
, pec.cTipoFt
, ref.cConstrucao
, tgr.Pares
, tgr.Pares / pec.QuantGrades3 ParesConv
, tgr.cUnidade
, tgr.NumGrade
, (SELECT Data
FROM Retornos
WHERE cFase = 1
AND Talao = tal.Talao) Corte
, (SELECT Data
FROM Retornos
WHERE cFase = 5
AND Talao = tal.Talao) Costura
, (SELECT Data
FROM Retornos
WHERE cFase = 8
AND Talao = tal.Talao) Montagem
FROM TalaoGrades tgr
, Taloes tal
, ReferenciaComb rec
, Referencias ref
, PedidoGrades peg
, PesJurFis pes
, PedidoCombs pec
, FasesFt f
, Pedidos ped
WHERE tgr.NumGrade = peg.NumGrade
AND tgr.Talao = tal.Talao
AND tal.InternoPedComb = pec.InternoPedComb
AND rec.cLargura = pec.cLargura
AND rec.cGrade = pec.cGrade
AND rec.SeqCombFt = pec.SeqCombFt
AND rec.CTipoFt = pec.CTipoFt
AND rec.cRefer = pec.CRefer
AND ref.CTipoFt = pec.CTipoFt
AND ref.CRefer = pec.CRefer
AND peg.InternoPedComb = pec.InternoPedComb
AND pes.cPessoaJur = ped.cPessoaJur
AND pec.Pedido = ped.Pedido
AND (:p_SoAberto = ´N´
OR NOT EXISTS (SELECT 1
FROM Retornos
WHERE cFase = f.cFaseFim
AND Talao = tal.Talao))
AND ped.DataPedido >= :p_Inicio
AND (ped.CarimboCorrugado = :p_CFaseFT
OR :p_CFaseFt = -1)
AND (ped.cPessoaJur = :p_CCliente
OR :p_CCliente = -1)
AND (ped.IdLote = :p_IdLote
OR :p_IdLote IS NULL)
AND f.cFaseFt = ped.CarimboCorrugado
AND ped.cTipoPedido = 7
ORDER BY ped.cPessoaJur || ´ ´ || pes.Fantasia
, ped.IDLote
, pec.CRefer
, ped.DataEntrega
, ped.Pedido
, rec.Descricao


Daia

Daia

Curtidas 0

Respostas

Rjun

Rjun

13/05/2005

(SELECT Numero FROM ReferenciaNumeracao WHERE NVL(cTitulo, NULL) = 200 AND cLargura = pec.cLargura AND cGrade = pec.cGrade AND cTipoFt = pec.cTipoFt AND cRefer = pec.cRefer) Numero


Ao que a parece, ele espera que esse Select retornasse apenas uma linha. No entanto deve estar retornando mais do que o esperado. Execute so esse trecho e veja quantas linhas ele retorna.


GOSTEI 0
Daia

Daia

13/05/2005

ele me retorna mais do q 100 linhas...


GOSTEI 0
Rjun

Rjun

13/05/2005

Então é por isso que não funciona. Era realmente isso que você esperava ? O que você esta pretendendo fazer ?


GOSTEI 0
Daia

Daia

13/05/2005

Mas veja só, está parte abaixo tb está no código e ela não me retorna erro e tb traz mais do que 100 linhas... não entendi a tua pergunta...
(SELECT ft.TextoTecnico
FROM v_FichaTecnica ft, pedidocombs pec
WHERE NVL(ft.cTitulo, NULL) = 32250
AND ft.SeqCombFt = pec.SeqCombFt
AND ft.cLargura = pec.cLargura
AND ft.cGrade = pec.cGrade
AND ft.cTipoFt = pec.cTipoFt
AND ft.cRefer = pec.cRefer)


GOSTEI 0
Rjun

Rjun

13/05/2005

(SELECT ft.TextoTecnico FROM v_FichaTecnica ft, pedidocombs pec WHERE NVL(ft.cTitulo, NULL) = 32250 AND ft.SeqCombFt = pec.SeqCombFt AND ft.cLargura = pec.cLargura AND ft.cGrade = pec.cGrade AND ft.cTipoFt = pec.cTipoFt AND ft.cRefer = pec.cRefer)


Tem certeza que esse select tambem retorna mais que 1 registro ? Se você tirar o 1° trecho de código, seu select funciona ?


GOSTEI 0
Daia

Daia

13/05/2005

sim funciona, acabei de testar...
Não sei mais o q fazer?


GOSTEI 0
Rjun

Rjun

13/05/2005

Mas você tem certeza q esse outro select retorna mais de 1 registro ?


GOSTEI 0
Daia

Daia

13/05/2005

tenho certeza absoluta...


GOSTEI 0
Rjun

Rjun

13/05/2005

Bom, se você tem certeza que o outro select retorna mais de 1 linha então tambem não sei o que pode ser...

Pelo que eu saiba, o subselect só pode retornar 1 linha, senão dispara o erro que esta dando...

single-row subquery returns more than one row



GOSTEI 0
Kotho

Kotho

13/05/2005

Amigo, com certeza você está se confundindo em algum ponto... nunca vai funcionar um select, com um sub-select (à menos que fique na clausula from, pois vai funcionar como uma view)... Fixe seus esforços para resolver o problema do primeiro sub-select...

outra coisa... pq vc utiliza NVL(cTitulo, NULL)... você está convertendo de NULL para NULL... não precisa.

Coloca para nós a estrutura da tabela ReferenciaNumeracao, e qual a PrimaryKey dela...


GOSTEI 0
Daia

Daia

13/05/2005

Está é a estrtura da minha tabela de Referencia Numeracao:

SQL> desc referencianumeracao
Name Null? Type
----------------------------------------------------- -------- ------------
CREFER NOT NULL VARCHAR2(12)
CTIPOFT NOT NULL NUMBER(6)
CGRADE NOT NULL NUMBER(6)
CLARGURA NOT NULL VARCHAR2(4)
NUMGRADE NOT NULL VARCHAR2(5)
CTITULO NOT NULL NUMBER(6)
TIPO NOT NULL VARCHAR2(1)
NUMERO VARCHAR2(15)


GOSTEI 0
Kotho

Kotho

13/05/2005

Qual a chave de acesso da tabela (PrimaryKey)?


GOSTEI 0
Daia

Daia

13/05/2005

a única que não é chave primaria é o NUMERO...


GOSTEI 0
Kotho

Kotho

13/05/2005

para o select retornar uma única linha, TODOS os campos que pertencem à PRIMARY KEY devem estar na clausula WHERE...

No caso o campo TIPO ficou de fora... verifique se tem como relaciona-lo à alguma tabela que está na cláusula FROM do SELECT principal, ou então, se ele deve ter um valor fixo...


GOSTEI 0
POSTAR