Firebird: Code Generator

PHOTO EMBED

Tue Sep 05 2023 16:25:02 GMT+0000 (Coordinated Universal Time)

Saved by @marcopinero #firebird #sql

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'))
 */
content_copyCOPY