MSSQL to PostgreSQL - Problema intentando generar ID de modo YYYYMMDD0000000X

From: "Ignacio Balcarce" <ignacio(dot)balcarce(at)vivatia(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: MSSQL to PostgreSQL - Problema intentando generar ID de modo YYYYMMDD0000000X
Date: 2010-04-06 13:08:59
Message-ID: 000301cad58a$52e36d80$f8aa4880$@balcarce@vivatia.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola,

Estoy convirtiendo un procedure de MSSQL a una funcion PostgreSQL.

El procedure de MSSQL es el siguiente.

CREATE PROCEDURE dbo.THUBAN_SP_GENERATEID

@NEWID VARCHAR(20) OUTPUT

AS

SET @NEWID = (

SELECT
REPLACE(SUBSTRING(CONVERT(CHAR(10),GETDATE(),20 ),1,10),'-','')

+ CAST(REPLICATE(0,8-LEN
(ISNULL(CAST(SUBSTRING(MAX(SEQ_ID),9,8) AS INTEGER),0) + 1)) AS VARCHAR)

+ CAST(ISNULL(CAST(SUBSTRING(MAX(SEQ_ID),9,8) AS INTEGER),0)

+ 1 AS VARCHAR)

FROM THUBAN_SEQ

WHERE SUBSTRING(SEQ_ID,1,8)=
REPLACE(SUBSTRING(CONVERT(CHAR(10),GETDATE(),20 ),1,10),'-','')

)

INSERT INTO THUBAN_SEQ VALUES (@NEWID)

SELECT @NEWID AS ITEM_ID;

GO

Esto es lo que logre hacer.

La tabla tiene esta estructura (Y no es modificable!)

CREATE TABLE THUBAN_SEQ (

SEQ_ID varchar(20) NOT NULL

);

Y la function es esta

CREATE OR REPLACE FUNCTION THUBAN_SP_GENERATEID() RETURNS VARCHAR

AS $$

DECLARE

item_id VARCHAR;

id INT8;

BEGIN

IF EXISTS (SELECT COALESCE(max(seq_id)) FROM thuban_seq

WHERE seq_id LIKE
(to_char(now() + '1 day'::interval, 'YYYYMMDD') || '%'))

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;

El problema es que cuando la llamo de esta manera:

SELECT THUBAN_SP_GENERATEID();

Obtengo el siguiente error:

ERROR: el valor null para la columna «seq_id» viola la restricción not null

CONTEXT: sentencia SQL: «INSERT INTO thuban_seq(seq_id) VALUES
(to_char(now(),'YYYYMMDD') || ( $1 +1)) RETURNING seq_id»

PL/pgSQL function "thuban_sp_generateid" line 19 at sentencia SQL

********** Error **********

ERROR: el valor null para la columna «seq_id» viola la restricción not null

SQL state: 23502

Context: sentencia SQL: «INSERT INTO thuban_seq(seq_id) VALUES
(to_char(now(),'YYYYMMDD') || ( $1 +1)) RETURNING seq_id»

PL/pgSQL function "thuban_sp_generateid" line 19 at sentencia SQL

Voy por buen camino? Alguna idea?

Gracias y Saludos.

Ignacio

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mariano Reingart 2010-04-06 18:31:20 Re: MSSQL to PostgreSQL - Problema intentando generar ID de modo YYYYMMDD0000000X
Previous Message Miguel Angel Hernandez Moreno 2010-04-06 01:03:57 pgpool 64 bits