Re: returned more than one row

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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