CREATE TABLE SECUENCIA(
ID INTEGER PRIMARY KEY,
CODIGO VARCHAR(60) NOT NULL,
PREFIJO VARCHAR(60),
DESCRIPCION VARCHAR(255) NOT NULL,
NUMERO INTEGER DEFAULT 0 NOT NULL
);
CREATE SEQUENCE SECUENCIA_ID_GEN;
CREATE TRIGGER T_SECUENCIA_BI
FOR SECUENCIA BEFORE INSERT
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(SECUENCIA_ID_GEN, 1);
END;
CREATE OR ALTER PROCEDURE SP_GENERA_SECUENCIA(CODIGO VARCHAR(60))
RETURNS (
SECUENCIA INTEGER
)
AS
DECLARE SEC INTEGER;
BEGIN
UPDATE SECUENCIA
SET NUMERO = NUMERO + 1
WHERE CODIGO = :CODIGO
RETURNING NUMERO INTO :SECUENCIA;
IF (SECUENCIA IS NULL) THEN
BEGIN
INSERT INTO SECUENCIA(CODIGO, DESCRIPCION, NUMERO) VALUES (:CODIGO, :CODIGO, 1);
SECUENCIA = 1;
END
SUSPEND;
END;
-- EJ
/*
* SELECT SECUENCIA FROM SP_GENERA_SECUENCIA('PRUEBA');
* ó .. NEW.SECUENCIA = (SELECT SECUENCIA FROM SP_GENERA_SECUENCIA('PRUEBA'))
*/