Tu Base de Datos sabe “Pensar”: Desbloqueando el Poder Oculto de Oracle 23ai
Introducción: La Muerte de la Búsqueda Exacta
Vivimos en una era de gratificación instantánea y expectativas de usuario elevadísimas. Cuando un usuario entra a tu aplicación hecha en Oracle APEX y busca “algo para escribir notas”, espera encontrar un “cuaderno” o una “libreta”.
Sin embargo, durante los últimos 40 años, la industria del software ha estado encadenada a la tiranía de la coincidencia exacta. Hemos dependido de LIKE '%notas%' o INSTR, herramientas que son ciegas al significado y esclavas de la sintaxis. Si la palabra no está, el resultado no existe.
Hoy, la industria está obsesionada con la “Inteligencia Artificial”. Pero hay un secreto que los arquitectos de software senior conocen y los juniors ignoran: la “magia” no es la IA. La magia son las matemáticas subyacentes.
La verdadera revolución en Oracle Database 23ai no es solo que pueda “hablar” con OpenAI; es que ha democratizado el álgebra lineal de alto rendimiento dentro del motor de la base de datos. Nos ha dado la capacidad de calcular la “distancia” entre conceptos, no solo entre caracteres.
En este artículo, voy a deconstruir la tecnología de Vector Search. No vamos a usar “cajas negras” ni APIs externas. Vamos a abrir el capó del motor para entender la mecánica de fluidos de los datos. Aprenderás a pensar en vectores, a visualizar datos multidimensionales y a implementar un sistema de búsqueda de próxima generación en APEX que funcione con la precisión de un reloj suizo, basándonos puramente en la geometría de tus datos.
Prepárate, porque vamos a rediseñar la forma en que entiendes una base de datos relacional.
Capítulo 1: Pensando en Multidimensionalidad
Para entender hacia dónde vamos, debemos olvidar por un momento las filas y columnas. Necesitamos pensar en el espacio.
Imagina una hoja de papel. Si dibujas dos puntos, puedes medir la distancia entre ellos con una regla. Esa distancia nos dice qué tan “relacionados” están esos puntos. Si los puntos están pegados, son casi lo mismo. Si están en extremos opuestos, son diferentes.
Esto es un espacio de 2 dimensiones (2D).
Ahora, imagina una caja. Tienes altura, anchura y profundidad. Sigues pudiendo medir la distancia entre dos puntos flotando en esa caja. Es un poco más complejo de calcular, pero es intuitivo.
Esto es un espacio de 3 dimensiones (3D).
En el mundo de los datos, un “Vector” no es más que una coordenada en ese espacio.
- Un vector 2D se ve así:
[10, 5] - Un vector 3D se ve así:
[10, 5, 8]
El Salto Cognitivo
Aquí está la clave: Cualquier cosa cuantificable puede ser representada como un vector.
Si tienes un coche, puedes representarlo como un vector basado en sus características: [Velocidad_Max, Precio, Peso].
- Ferrari:
[300, 250000, 1500] - Tsuru:
[160, 5000, 1100]
Si graficamos esos puntos en un espacio 3D, el punto del “Ferrari” estará lejísimos del punto del “Tsuru”. Pero estará muy cerca del punto de un “Lamborghini”.
La base de datos no sabe qué es un coche. No sabe de lujo ni de ingeniería. Pero sabe que, matemáticamente, el vector del Ferrari y el del Lamborghini son vecinos cercanos en el espacio vectorial.
Esta proximidad geométrica es lo que llamamos Similitud Semántica. Y Oracle 23ai ahora tiene funciones nativas para calcular estas distancias a la velocidad del rayo.
Capítulo 2: El Laboratorio – Vectores sin “Cajas Negras”
Para demostrar que no necesitamos una IA generativa para beneficiarnos de esta tecnología, vamos a construir un motor de recomendación visual.
El caso de uso es simple: Una tienda de pintura. El cliente trae una muestra de color (un trozo de tela, una foto vieja) y quiere encontrar la pintura más parecida que tengamos en stock.
No podemos hacer WHERE color_name = 'Azulito', porque “Azulito” es subjetivo. Necesitamos matemáticas.
El Modelo de Datos: RGB
Todo color digital se compone de tres canales: Rojo (R), Verde (G) y Azul (B). Cada uno va de 0 a 255.
- Rojo Intenso:
[255, 0, 0] - Negro:
[0, 0, 0] - Blanco:
[255, 255, 255]
Vamos a crear nuestra tabla en Oracle 23ai utilizando el nuevo tipo de dato VECTOR.
-- Creación de la tabla de inventario
CREATE TABLE paint_inventory (
paint_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
color_name VARCHAR2(100),
hex_code VARCHAR2(7),
category VARCHAR2(50),
-- Aquí está la magia: Un vector de 3 dimensiones de punto flotante
color_vector VECTOR(3, FLOAT32)
);
Nota el tipo de dato VECTOR(3, FLOAT32).
Oracle ha optimizado este tipo de dato a nivel binario. No es un JSON guardado como texto, ni un array de VARRAY. Es una estructura contigua en memoria diseñada para operaciones SIMD (Single Instruction, Multiple Data) en el procesador. Esto significa que la CPU puede comparar estos vectores masivamente en paralelo.
Ingesta de Datos (La “Vectorización” Manual)
Como somos los ingenieros de datos, nosotros definimos las reglas de vectorización. En este caso, la regla es simple: mapear los valores RGB.
INSERT INTO paint_inventory (color_name, hex_code, color_vector)
VALUES ('Ocean Deep', '#000080', '[0, 0, 128]');
INSERT INTO paint_inventory (color_name, hex_code, color_vector)
VALUES ('Sky High', '#87CEEB', '[135, 206, 235]');
INSERT INTO paint_inventory (color_name, hex_code, color_vector)
VALUES ('Forest Green', '#228B22', '[34, 139, 34]');
INSERT INTO paint_inventory (color_name, hex_code, color_vector)
VALUES ('Sunset Orange', '#FF4500', '[255, 69, 0]');
INSERT INTO paint_inventory (color_name, hex_code, color_vector)
VALUES ('Coral Soft', '#FF7F50', '[255, 127, 80]');
Ahora tenemos un espacio vectorial poblado. Visualmente, tenemos puntos dispersos en nuestro cubo 3D imaginario.
Capítulo 3: La Matemática de la Búsqueda (Euclidean Distance)
El cliente llega con un color desconocido. Digamos que es un naranja rojizo. Digitalizamos ese color y obtenemos el vector input: [250, 80, 10].
¿Cómo le preguntamos a la base de datos cuál es el color más parecido?
Aquí entra la Distancia Euclidiana.
Si recuerdas tus clases de geometría, la distancia entre dos puntos $(x_1, y_1)$ y $(x_2, y_2)$ es la raíz cuadrada de la suma de las diferencias al cuadrado.

En SQL tradicional, calcular esto sería doloroso y lento:
SQRT( POWER(R1-R2, 2) + POWER(G1-G2, 2) + POWER(B1-B2, 2) ).
En Oracle 23ai, tenemos la función nativa VECTOR_DISTANCE.
SELECT
color_name,
color_vector,
VECTOR_DISTANCE(
color_vector,
TO_VECTOR('[250, 80, 10]'),
EUCLIDEAN
) as distancia_matematica
FROM
paint_inventory
ORDER BY
distancia_matematica ASC
FETCH FIRST 5 ROWS ONLY;
¿Qué sucede “detrás de escenas”?
- Oracle toma el vector input
[250, 80, 10]. - Recorre los vectores almacenados.
- Calcula la distancia geométrica exacta.
- Ordena los resultados de menor distancia (más parecido) a mayor distancia (menos parecido).
El resultado será “Sunset Orange” (que es [255, 69, 0]) porque la distancia es mínima. Matemáticamente, están casi en el mismo lugar del cubo.
Acabamos de crear un motor de búsqueda “inteligente” que entiende matices de color, sin usar una sola neurona artificial. Solo geometría pura.
Capítulo 4: Escalando la Complejidad – Índices Vectoriales
Aquí es donde separamos a los aficionados de los expertos.
En nuestro ejemplo de pinturas, tenemos quizás 5,000 colores. Oracle puede hacer un “Full Table Scan” y calcular la distancia matemática para cada fila en milisegundos. Es fuerza bruta, pero funciona.
Pero, ¿qué pasa si somos Spotify y tenemos 100 millones de canciones? ¿O Amazon con mil millones de productos?
Calcular la distancia de un punto contra otros 100 millones de puntos en tiempo real es inviable. La CPU explotaría.
Aquí es donde entra la verdadera potencia de Oracle 23ai: Los Índices Vectoriales.
Oracle introduce un nuevo tipo de índice llamado HNSW (Hierarchical Navigable Small World).
¿Cómo funciona HNSW?
Imagina que estás buscando a un amigo en una ciudad gigante.
- Sin índice: Tienes que tocar puerta por puerta en cada casa de la ciudad (Full Table Scan).
- Con índice B-Tree (Tradicional): Tienes una guía telefónica alfabética. Funciona para texto exacto, pero no para “cercanía”.
- Con HNSW: Imagina que la ciudad tiene un sistema de autopistas, avenidas y calles locales.
- Empiezas en la autopista (Capa superior del grafo) y das saltos gigantes hacia la zona general donde vive tu amigo.
- Bajas a una avenida (Capa media) y te acercas más.
- Finalmente bajas a la calle (Capa base) y buscas solo entre los vecinos cercanos.
El índice HNSW crea un grafo de navegación multicapa sobre tus vectores.
Para implementarlo en nuestra tabla de pinturas (pensando en que escalará a millones de tonos):
CREATE VECTOR INDEX idx_colors_hnsw
ON paint_inventory (color_vector)
ORGANIZATION INMEMORY NEIGHBOR GRAPH
DISTANCE METRIC EUCLIDEAN;
Ahora, la consulta no compara contra todas las filas. Navega el grafo y encuentra los vecinos más cercanos de forma logarítmica. Esto permite búsquedas de milisegundos incluso con billones de datos. Esto es ingeniería de alto nivel.
Capítulo 5: Implementación en APEX (El Front-End)
Tenemos el motor matemático (Oracle 23ai) y la estructura de datos optimizada. Ahora, ¿cómo entregamos esto al usuario final? APEX es la herramienta perfecta por su bajo overhead.
1. La Interfaz de Entrada
Necesitamos capturar el input del usuario. Podemos usar un “Color Picker” (Item type: Color Picker) en APEX que nos devuelve un Hex Code (ej. #FF5733).
2. La Transformación (Hex a Vector)
El usuario nos da Hex, pero la base de datos habla Vector. Necesitamos una pequeña función de utilidad en PL/SQL para hacer el puente.
FUNCTION hex_to_vector(p_hex IN VARCHAR2) RETURN VECTOR IS
l_r NUMBER;
l_g NUMBER;
l_b NUMBER;
BEGIN
-- Lógica simple de conversión HEX a RGB
l_r := to_number(substr(p_hex, 2, 2), 'XX');
l_g := to_number(substr(p_hex, 4, 2), 'XX');
l_b := to_number(substr(p_hex, 6, 2), 'XX');
-- Retornamos el vector nativo
RETURN TO_VECTOR('[' || l_r || ',' || l_g || ',' || l_b || ']');
END;
3. El Reporte Interactivo
Creamos una región de tipo Cards o Classic Report. La fuente SQL será dinámica:
SQL
SELECT
pi.color_name,
pi.hex_code,
pi.category,
'<div style="background-color:' || pi.hex_code || '; width:50px; height:50px;"></div>' as color_preview,
ROUND(
VECTOR_DISTANCE(
pi.color_vector,
hex_to_vector(:P1_SELECTED_COLOR),
EUCLIDEAN
), 2
) as diferencia_visual
FROM
paint_inventory pi
ORDER BY
diferencia_visual ASC
FETCH FIRST 12 ROWS ONLY;
El Resultado:
El usuario selecciona un color en el selector. Inmediatamente, APEX le muestra las 12 pinturas más parecidas que existen físicamente en el almacén, ordenadas por similitud visual.
Sin APIs de terceros. Sin latencia de red. Sin costos por token. Todo ocurriendo en la memoria de tu servidor de base de datos.
Conclusión: De Colores a Conceptos
Hemos usado el ejemplo de los colores (RGB – 3 dimensiones) porque es fácil de visualizar. Pero aquí es donde tu mente debe dar el salto.
Las IAs modernas (LLMs) funcionan exactamente igual, pero en lugar de 3 dimensiones, usan 1024, 1536 o 4096 dimensiones.
- En nuestro ejemplo, la dimensión 1 era “Rojo”.
- En un LLM, la dimensión 1 podría ser “Masculinidad”, la dimensión 2 “Realeza”, la dimensión 3 “Verbo pasado”, etc.
Cuando convertimos la palabra “Rey” a vector, obtenemos una coordenada.
Cuando convertimos “Reina” a vector, obtenemos otra.
Si restamos el vector “Hombre” y sumamos “Mujer” al vector “Rey”, matemáticamente aterrizamos cerca del vector “Reina”.
Esa es la base de toda la Inteligencia Artificial Generativa.
Al dominar VECTOR en Oracle 23ai con este ejemplo simple de colores, ya has aprendido el fundamento principal. Lo único que cambia es la complejidad del vector, no la lógica de almacenamiento ni de búsqueda.
Tu Próximo Paso:
Deja de ver a tu base de datos Oracle como un simple almacén de textos y números. Es un motor de cálculo geométrico. Tienes la herramienta más potente del mercado; el reto ahora es empezar a pensar en dimensiones, no solo en caracteres.
¿Estás listo para dejar atrás el LIKE '%...%'?
Referencias
Este artículo es solo la punta del iceberg. Para aquellos ingenieros que no se conforman con la implementación y quieren dominar la teoría matemática y algorítmica detrás de Vector Search, he seleccionado los recursos que fundamentaron este análisis.
Documentación Técnica y Manuales
- Oracle. (2024). Oracle Database 23ai: AI Vector Search User’s Guide. Oracle Help Center. Link a la documentación.
- Lectura obligatoria para entender la sintaxis nativa de PL/SQL y los nuevos tipos de datos.
- Oracle. (2024). Oracle APEX App Builder User’s Guide: Release 24.1. Oracle Help Center.
- Referencia para la integración de componentes visuales modernos.
Papers Académicos y Teoría (Nivel Avanzado)
- Malkov, Y. A., & Yashunin, D. A. (2018). Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs. IEEE Transactions on Pattern Analysis and Machine Intelligence, 42(4), 824–836.
- El paper original que define el algoritmo HNSW. Crucial para entender cómo funcionan los índices vectoriales a escala masiva.
- Strang, G. (2016). Introduction to linear algebra (5th ed.). Wellesley-Cambridge Press.
- La “biblia” para entender qué es realmente un espacio vectorial y la proyección de datos.
- Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press.
- Un clásico sobre cómo funcionan los motores de búsqueda antes y después de la era semántica.

Social List