Snippets Collections
CREATE OR ALTER FUNCTION ALL_MATCHING(
    TEXTO_ORIGINAL VARCHAR(1000),
    CADENA_BUSQUEDA VARCHAR(1000))
RETURNS BOOLEAN
AS
DECLARE VARIABLE palabra VARCHAR(100);
DECLARE VARIABLE pos INTEGER;
DECLARE VARIABLE encontrado BOOLEAN;
BEGIN
    -- Si la cadena de búsqueda está vacía, retornar verdadero
    IF (CADENA_BUSQUEDA IS NULL OR CADENA_BUSQUEDA = '') THEN
        RETURN TRUE;
    
    -- Convertir a mayúsculas para búsqueda insensible a mayúsculas/minúsculas
    TEXTO_ORIGINAL = UPPER(TEXTO_ORIGINAL);
    CADENA_BUSQUEDA = UPPER(TRIM(CADENA_BUSQUEDA));
    
    -- Si el texto original está vacío
    IF (TEXTO_ORIGINAL IS NULL OR TEXTO_ORIGINAL = '') THEN
        RETURN FALSE;
    
    -- Dividir la cadena de búsqueda en palabras y verificar cada una
    WHILE (CADENA_BUSQUEDA != '') DO
    BEGIN
        -- Extraer la siguiente palabra (separada por espacio)
        pos = POSITION(' ', CADENA_BUSQUEDA);
        IF (pos = 0) THEN
        BEGIN
            palabra = CADENA_BUSQUEDA;
            CADENA_BUSQUEDA = '';
        END
        ELSE
        BEGIN
            palabra = SUBSTRING(CADENA_BUSQUEDA FROM 1 FOR pos - 1);
            CADENA_BUSQUEDA = SUBSTRING(CADENA_BUSQUEDA FROM pos + 1);
        END
        
        -- Eliminar espacios adicionales
        palabra = TRIM(palabra);
        
        -- Si la palabra no está vacía, verificar si existe en el texto
        IF (palabra != '') THEN
        BEGIN
            encontrado = FALSE;
            
            -- Buscar la palabra como subcadena en el texto original
            IF (POSITION(palabra IN TEXTO_ORIGINAL) > 0) THEN
                encontrado = TRUE;
            
            -- Si una palabra no se encuentra, retornar falso
            IF (NOT encontrado) THEN
                RETURN FALSE;
        END
    END
    
    -- Si todas las palabras fueron encontradas
    RETURN TRUE;
END
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'))
 */
star

Fri Feb 06 2026 13:52:40 GMT+0000 (Coordinated Universal Time)

#firebird #sql
star

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

#firebird #sql

Save snippets that work with our extensions

Available in the Chrome Web Store Get Firefox Add-on Get VS Code extension