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