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
