Re: Validar parametros entrada

From: Mario Gonzalez <gonzalemario(at)gmail(dot)com>
To: Jaime Casanova <systemguards(at)gmail(dot)com>
Cc: Postgresql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Validar parametros entrada
Date: 2005-12-21 15:34:38
Message-ID: 2065a6cf0512210734u146a9651g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On 21/12/05, Jaime Casanova <systemguards(at)gmail(dot)com> wrote:
> On 12/21/05, Mario Gonzalez <gonzalemario(at)gmail(dot)com> wrote:
> > Hola, estoy haciendo una funcion que basicamente inserta un valor y
> > devuele el numero de secuencia, quiero validar el parametro de
> > entrada, que no este vacio. Lo hice de una manera que no me gusta
> > mucho, no es muy elegante ni optima segun yo. Lo otro seria crear un
> > CHECK en el atributo pero... veamos.
> >
> > La tabla es muy pequeña, viendo el modo expandido:
> >
> > Tabla "public.departamentos"
> > -[ RECORD 1 ]-+-----------------------------------------------------------------------
> > Columna | id_departamento
> > Tipo | integer
> > Modificadores | not null default
> >
> > nextval('public.departamentos_id_departamento_seq'::text)
> >
> > -[ RECORD 2 ]-+------------------------------------------------------------------------
> > Columna | nombre_departamento
> > Tipo | text
> > Modificadores | not null
> >
> >
> > CREATE OR REPLACE FUNCTION insert_new_depto(text) RETURNS integer AS '
> > DECLARE
> > nom_depto ALIAS FOR $1;
> > BEGIN
> > --SI no hay datos en el string nom_depto entonces devuelvo un -1
> > SELECT length(nom_depto) INTO TEMPORARY tmp_table;
> > IF tmp_table.length > 0 THEN
> > --Igualmente falta capturar el error si se produce una clave duplicada
>
>
> no necesitas hacer eso, si solo ejecutas nextval y currval (y solo
> insertas el valor default en esa columna) ten la seguridad que la
> secuencia nunca te va a devolver elementos duplicados
>
Lo que pasa es que necesito ese numero como informacion al usuario
o para el desarrollador (yo, jeje). Tengo una lista de datos y cuando
hago una nueva insercion solo agrego al final lo que necesito y no
tengo que reconstruir la lista entera, ohhh!! ; )

> > --pero estoy con 7.4 y hasta donde he leido no se pueden capturar
>
> como que no?
>
> SELECT nextval('secuencia') INTO variable;
> IF EXISTS (SELECT * FROM tabla WHERE id_departamento = variable) THEN
> raise exception "mensaje de error";
> END IF;
>
uppss!! verdad ; ) estaba pensando que cuando postgreSQL me
arrojara algo como "warning: clave duplicada...." capturar el error y
hacer lo que hay que hacer. Segun yo el codigo que escribes mas arriba
es un poco mas lento que capturar una excepcion (Por favor corrijan)

> no necesitas hacer esto sin embargo si solo insertas el valor de la
> secuencia y nunca modificas la secuencia a "mano"...
>
> > INSERT INTO departamentos (nombre_departamento)
> > VALUES (nom_depto);
> > RETURN currval(\'departamentos_id_departamento_seq\');
> > END IF;
> >
> > RETURN -1;
> > END;
> > 'LANGUAGE 'plpgsql';
> >
> > Como ya ven creo una tabla temporal para ello, se pudiera hacer algo
> > mas simple como un?
> >
> > len := length(nom_depto);
> >
> > Saludos!
> >
>
> si... deja buscar...
>
> aja!!! como no se nos ocurrio antes puedes usar algo como:
>
> len := length(nom_depto);
>
No me habia funcionado, obviamente entonces habia cometido algun error.

> quiza mas seguro sea hacer:
>
> IF nom_depto IS NULL AND nom_depto = \'\' THEN
> o
> IF nom_depto IS NULL AND length(nom_depto) = 0 THEN
>
ok, gracias!

>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Javier Aquino H. 2005-12-21 16:02:01 Re: Validar parametros entrada
Previous Message Antonio 2005-12-21 15:29:51 Re: Migracion de access a postgres