From: | "Ignacio Balcarce" <ignacio(dot)balcarce(at)vivatia(dot)com> |
---|---|
To: | "'Mariano Reingart'" <reingart(at)gmail(dot)com> |
Cc: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: MSSQL to PostgreSQL - Problema intentando generar ID de modo YYYYMMDD0000000X |
Date: | 2010-04-06 19:59:42 |
Message-ID: | 000501cad5c3$b37e0540$1a7a0fc0$@balcarce@vivatia.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Claro, lo que sucede es que yo necesito saber si existe algún id creado ya
para ese dia, por eso es que pregunto que sea del mismo dia el id cuando
llamo ahi.
Aca modifique un poco la función, se ve asi ahora. Pero estoy teniendo
incovenientes con el to_char.
Como se hace para pasar una variable como parámetro de tipo int?
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;
to_char(id, '8');
RAISE NOTICE 'ID SOLAMENTE
CREADO DENTRO DEL IF ES %', id;
ELSE
id:= 00000000;
to_char(id, '8');
RAISE NOTICE 'ID SOLAMENTE
CREADO DENTRO DEL ELSE ES %', id;
END IF;
INSERT INTO thuban_seq(seq_id) VALUES (to_char(now(),'YYYYMMDD') ||
(id+1)) RETURNING seq_id INTO item_id;
RAISE NOTICE 'EL ID CALCULADO ES %', id;
RETURN item_id;
END;
$$ LANGUAGE plpgsql;
-----Mensaje original-----
De: Mariano Reingart [mailto:reingart(at)gmail(dot)com]
Enviado el: Martes, 06 de Abril de 2010 04:43 p.m.
Para: Ignacio Balcarce
CC: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] MSSQL to PostgreSQL - Problema intentando
generar ID de modo YYYYMMDD0000000X
2010/4/6 Ignacio Balcarce <ignacio(dot)balcarce(at)vivatia(dot)com>:
> 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
From | Date | Subject | |
---|---|---|---|
Next Message | Jaime Casanova | 2010-04-06 20:00:54 | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Es posible recuperar una base de datos después de hacer "drop database"? |
Previous Message | Mariano Reingart | 2010-04-06 19:42:36 | Re: MSSQL to PostgreSQL - Problema intentando generar ID de modo YYYYMMDD0000000X |