Oracle - ORA-01422

 
Vista:

ORA-01422

Publicado por tomas (1 intervención) el 24/11/2006 14:40:30
Tengo este problema y no se que es, si alguien puede ayudar

SELECT a.conr_co_contrato, MAX(soli_co_cua) INTO contrato2, maxCUA
FROM QWCOGXMO a
WHERE a.conr_co_contrato = conr_co_contrato and a.resu_co_resultado = '012'
GROUP BY conr_co_contrato,resu_co_resultado;

En la tabla hay varios registros con el mismo co_contrato y con soli_co_cua puede ser igual o distinto para cada contrato.

Al ejecutar el procedimiento al hacer esta consulta me sale este error ORA-01422: exact fetch returns more than requested number of rows
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ORA-01422

Publicado por jose (16 intervenciones) el 24/11/2006 14:49:27
El aparente problema que presentas es que ese query regresa varias columnas. en este caso varios a.conr_co_contrato por lo tanto contrato2 no puede guardar varios datos.
Asegurate que solo retorne un valor el query y luego le agregas el into con las variables
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ORA-01422

Publicado por Hernan (1 intervención) el 23/04/2007 16:55:05
Lo que pasa es que te falta una condición adicional para que no te devuelva mas de un resgistro. Controla eso y te funcionara.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ORA-01422_AYUDA

Publicado por Pipe Morales (1 intervención) el 25/04/2013 00:39:20
ESTE ES EL CODIGO Y TAMBIENB ME SALE EL MISMO ERROR.
SERA QUE LA FUNCTION ESTA MAL (SINTAXIS)

CREATE OR REPLACE FUNCTION F_CANTIDAD_CLIENTE
(V_FECHA_FACT DATE,
V_CEDULA CLIENTE.COD_CLI%TYPE,
V_NUM_FACT VENTA_DROGA.N_FACT_VEN%TYPE,
V_COD_DROGA VENTA_DROGA.N_DRO%TYPE)
RETURN NUMBER
AS
V_CANTIDAD NUMBER;
BEGIN
SELECT COUNT(*) INTO V_CANTIDAD
FROM VENTA_DROGA VD JOIN FACTURA_VENTA FV ON FV.N_FACT_VEN =VD.N_FACT_VEN
JOIN CLIENTE C ON FV.COD_CLI = C.COD_CLI
WHERE FV.FEC_FACT_VEN <= V_FECHA_FACT AND C.COD_CLI=V_CEDULA AND VD.N_FACT_VEN=V_NUM_FACT AND VD.N_DRO = V_COD_DROGA;
RETURN V_CANTIDAD;
END;



DECLARE
CURSOR C_H_FREC_CLIENTE
IS SELECT * FROM FARMACIA.V_H_FREC_CLIENTE;
R_FREC_CLIENTE H_FRECUENCIA_CLIENTE%ROWTYPE;
V_CEDULA D_CLIENTE.CEDULA%TYPE;
V_EDAD D_CLIENTE.EDAD%TYPE;
V_GENERO D_CLIENTE.GENERO%TYPE;
V_ESTRATO D_CLIENTE.ESTRATO%TYPE;
V_FECHA_FACT DATE;
V_COD_CIUDAD D_LUGAR.COD_CIUDAD%TYPE;
V_COD_DPTO D_LUGAR.COD_DPTO%TYPE;
V_NUM_FACT D_VENTA.N_FACT_VEN%TYPE;
V_COD_DROGA D_VENTA.N_DROG%TYPE;
V_CANTIDAD D_VENTA.CANTIDAD%TYPE;
V_VALOR_VENTA D_DROGA.VALOR_VENTA%TYPE;
V_VALOR_COMPRA D_DROGA.VALOR_COMPRA%TYPE;
V_COD_FABRIC D_DROGA.COD_LAB%TYPE;
V_COD_SUCUR D_VENTA.COD_SUCUR%TYPE;

BEGIN
OPEN C_H_FREC_CLIENTE;
LOOP
FETCH C_H_FREC_CLIENTE INTO V_CEDULA,V_EDAD,V_GENERO,V_ESTRATO,V_FECHA_FACT,V_COD_CIUDAD,V_COD_DPTO,V_NUM_FACT,V_COD_DROGA,V_CANTIDAD,V_VALOR_VENTA,V_VALOR_COMPRA,
V_COD_FABRIC,V_COD_SUCUR;
EXIT WHEN C_H_FREC_CLIENTE%NOTFOUND;
SELECT LLAVE_CLIENTE INTO R_FREC_CLIENTE.LLAVE_CLIENTE
FROM D_CLIENTE
WHERE CEDULA=V_CEDULA AND EDAD=V_EDAD AND GENERO = V_GENERO AND ESTRATO =V_ESTRATO;

SELECT LLAVE_LUGAR INTO R_FREC_CLIENTE.LLAVE_LUGAR
FROM D_LUGAR
WHERE COD_CIUDAD = V_COD_CIUDAD AND COD_DPTO = V_COD_DPTO;

SELECT LLAVE_TIEMPO INTO R_FREC_CLIENTE.LLAVE_TIEMPO
FROM D_TIEMPO
WHERE DIA=TO_CHAR(V_FECHA_FACT,'DD') AND MES=TO_CHAR(V_FECHA_FACT,'MM') AND ANO=TO_CHAR(V_FECHA_FACT,'YYYY');

SELECT LLAVE_VENTA INTO R_FREC_CLIENTE.LLAVE_VENTA
FROM D_VENTA
WHERE N_FACT_VEN= V_NUM_FACT AND N_DROG = V_COD_DROGA AND CANTIDAD=V_CANTIDAD AND COD_SUCUR = V_COD_SUCUR;

SELECT LLAVE_DROGA INTO R_FREC_CLIENTE.LLAVE_DROGA
FROM D_DROGA
WHERE VALOR_VENTA = V_VALOR_VENTA AND VALOR_COMPRA = V_VALOR_COMPRA AND COD_LAB = V_COD_FABRIC;

R_FREC_CLIENTE.CANT_CLI:=FARMACIA.F_CANTIDAD_CLIENTE(V_FECHA_FACT,V_CEDULA,V_NUM_FACT,V_COD_DROGA);
INSERT INTO H_FRECUENCIA_CLIENTE
VALUES R_FREC_CLIENTE;
END LOOP;
CLOSE C_H_FREC_CLIENTE ;
COMMIT;
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar