From: | "Julio Rivero" <jcrmlima(at)gmail(dot)com> |
---|---|
To: | "juan jose dominguez" <preguntas_sql(at)hotmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: returned more than one row |
Date: | 2006-05-01 15:32:56 |
Message-ID: | d34a12b60605010832i261c13aej7e816c4d7109999d@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On 5/1/06, juan jose dominguez <preguntas_sql(at)hotmail(dot)com> wrote:
>
> Buenas tengo las siguientes tablas:
>
>
> --DROP TABLE codigos_provincia;
>
> CREATE TABLE codigos_provincia
> (
> codigo numeric NOT NULL,
> provincia char(25)
> ) ;
>
> INSERT INTO codigos_provincia VALUES (01,'Álava');
> INSERT INTO codigos_provincia VALUES (02,'Albacete');
> INSERT INTO codigos_provincia VALUES (03,'Alicante');
> ...
>
>
> Y:
>
>
> DROP TRIGGER trigger_comprueba_cp ON mitabla;
> DROP FUNCTION comprueba_cp () ;
>
> CREATE FUNCTION comprueba_cp () RETURNS OPAQUE AS'
> DECLARE
> n_aux NUMERIC;
> BEGIN
> IF (NEW.micodigo) ISNULL THEN RAISE EXCEPTION ''El código no puede ser
> nulo'';
> END IF;
>
> IF (NEW.miprovincia) ISNULL THEN RAISE EXCEPTION ''La provincia no puede
> ser
> nula'';
> END IF;
n_aux := 0;
n_aux := n_aux / 1000;
>
> SELECT codigos_provincia.codigo INTO n_aux FROM codigos_provincia WHERE
> NEW.miprovincia = codigos_provincia.provincia;
Puedes adicionarle un group by
---
SELECT codigos_provincia.codigo INTO n_aux FROM codigos_provincia WHERE
NEW.miprovincia = codigos_provincia.provincia
GROUP BY codigos_provincia.codigo;
---
IF (n_aux = codigos_provincia.codigo) THEN RAISE NOTICE ''Codigo postal %
> corresponde a la provincia %'', NEW.micodigo, NEW.miprovincia;
> ELSE RAISE EXCEPTION ''Codigo postal % NO corresponde a la provincia %'',
> NEW.micodigo, NEW.miprovincia;
> END IF;
>
> RETURN NEW;
> END;
> 'LANGUAGE 'plpgsql';
>
> CREATE TRIGGER trigger_comprueba_cp BEFORE INSERT OR UPDATE ON mitabla
> FOR EACH ROW EXECUTE PROCEDURE comprueba_cp ();
>
>
> Y me da el siguiente error al insertar:
> INSERT INTO mitabla VALUES (28080, 'Madrid', 'Juan');
>
>
>
> ERROR: query "SELECT ( $1 = codigos_provincia.codigo)" returned more
> than
> one row
> CONTEXT: PL/pgSQL function "comprueba_cp" line 13 at if
La consulta esta devolviendo mas de 2 valores (es lo que te esta diciendo).
Puedes hacer un
IF EXISTS (SUBQUERY)
...
ELSE
...
END IF;
Si existe datos en tu subquery el valor del EXISTS te va a devolver TRUE, de
lo contrario haces lo otro.
Tiene que comprobar que el codigo que inserto se corresponde con la
> provincia, pero solo hay un codigo para cada provincia, el select solo
> devuelve una celda... que puedo hacer?
>
> GRACIAS!
>
> _________________________________________________________________
> Moda para esta temporada. Ponte al día de todas las tendencias.
> http://www.msn.es/Mujer/moda/default.asp
>
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 9: el optimizador ignorará el uso de recorridos de índice si los
> tipos de datos de las columnas no coinciden
>
--
Saludos
Att,
Julio Rivero
Movil: 98817321
From | Date | Subject | |
---|---|---|---|
Next Message | Martin Marques | 2006-05-01 15:59:37 | Re: returned more than one row |
Previous Message | carmen camacho | 2006-05-01 15:12:35 | Ayuda |