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