2010/4/6 Ignacio Balcarce <[email protected]>:
> Barbaro, ahora me cierra un poco mas. Gracias por tu ayuda. El script quedo
> de esta manera:
>
> CREATE OR REPLACE FUNCTION THUBAN_SP_GENERATEID() RETURNS VARCHAR
> AS $$
> DECLARE
>   item_id   VARCHAR;
>   id        INT8;
> BEGIN
>                IF (SELECT max(seq_id) FROM thuban_seq
>                    WHERE seq_id LIKE (to_char(now() + '1 day'::interval,
> 'YYYYMMDD') || '%')) IS NOT NULL
>
>                               THEN
>                                               SELECT max(seq_id) INTO
> item_id
>                                               FROM thuban_seq
>                                               WHERE seq_id LIKE
> (to_char(now() + '1 day'::interval, 'YYYYMMDD') || '%');
>
>                                               id := substr(item_id, 9,
> length(item_id)-9)::INT8;
>
>                ELSE
>                                               id:= 00000000;
>                END IF;
>
>   INSERT INTO thuban_seq(seq_id) VALUES (to_char(now(),'YYYYMMDD') ||
> (id+1)) RETURNING seq_id INTO item_id;
>
>   RETURN item_id;
>
> END;
> $$ LANGUAGE plpgsql;
>

Primero, para simplificar, podés hacer el SELECT max(seq_id) INTO id
afuera, y luego el IF id IS NOT NULL (admás, en el IF preguntas  + '1
day'::interval y abajo consultas para el día de hoy, por eso calculo
que no lo encuentra).

Despues, convertí el id con to_char para que conserve los 0 a la izquierda.

Por último, te recomiendo usar los mensajes del servidor de PostgreSQL
para informar el valor calculado (por ej):

RAISE NOTICE 'El ID calculado es %', id;

Así te imprime esos mensajes para facilitar el seguimiento y depuración.

Sds

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com
--
TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo 
agradecerán

Responder a