Re: Validar parametros entrada

From: Jaime Casanova <systemguards(at)gmail(dot)com>
To: Mario Gonzalez <gonzalemario(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:14:33
Message-ID: c2d9e70e0512210714h1db309eaxa891fb75cefb1fe7@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

> --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;

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);

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

--
Atentamente,
Jaime Casanova
(DBA: DataBase Aniquilator ;)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2005-12-21 15:15:25 Re: Validar parametros entrada
Previous Message Jaime Casanova 2005-12-21 15:00:18 Re: Migracion de access a postgres