Todo lo que debes saber sobre Data Generator en Oracle APEX


Hoy en día es común escuchar eso de que “los datos son el nuevo petróleo”. Aunque esta frase se ha vuelto casi un cliché, no deja de contener mucha verdad. Sin embargo, para quienes llevamos algo de tiempo en este sector, esta afirmación no es ninguna novedad.
Cuando imparto alguna formación sobre Oracle APEX, suelo insistir en una idea que considero fundamental: los datos son nuestra materia prima. Lo valioso de trabajar con herramientas low-code como APEX es precisamente que nos permiten transformar esos datos en información útil de forma ágil y eficiente.
Por eso, antes de lanzarnos a explorar las últimas tendencias — ya sea inteligencia artificial, estructuras vectoriales u otras tecnologías emergentes —, creo que viene bien hacer una pausa, tomar un poco de perspectiva y volver a centrarnos en lo esencial de nuestro trabajo como desarrolladores: los datos.
Importancia del dato
Podemos diseñar una arquitectura moderna, servicios perfectamente orquestados y pipelines de CI/CD que operen como un reloj de precisión… pero sin datos, todo eso se queda en una estructura vacía. El dato es lo que conecta el código con la realidad, lo que permite validar comportamientos, detectar errores y, en última instancia, aportar valor.
Y no hablamos solo de datos en producción. En desarrollo, contar con datos realistas y representativos marca la diferencia entre un entorno útil y uno que simplemente “compila”. Es mucho más fácil detectar errores, probar flujos edge-case o simplemente tener una idea clara de cómo se comporta la app en situaciones reales si tienes buenos datos con los que trabajar. Lo mismo aplica para entornos de test, staging o demos para clientes: si los datos parecen inventados o genéricos, se nota.
En definitiva, tener datos de calidad (y saber generarlos cuando no los tienes) no es un detalle menor. Es parte de nuestro día a día. Por eso herramientas como Data Generator no son un extra, sino una necesidad.
Algunas herramientas que ayudan a resolver este problema son Mockaroo, Generatedata, FillDB, SQL Data Generator… y, por supuesto, la protagonista de este post: Data Generator.
Data Generator
En mayo de 2022, con la llegada de Oracle APEX 22.1, se incorpora una nueva utilidad que pasa un poco desapercibida al principio, pero que resulta ser tremendamente útil: Data Generator (o Generador de Datos, si lo prefieres en castellano).
Esta herramienta permite generar datos de prueba en múltiples formatos (CSV, JSON y SQL), apoyándose en una biblioteca bastante completa de tipos de datos. Y lo mejor: todo esto sin salir del entorno APEX.
Desde entonces, tanto desarrolladores como testers y analistas contamos con un recurso dentro de la sección de Utilidades (SQL Workshop > Utilities > Data Generator), integrado y potente para crear datos de prueba de forma rápida y flexible, sin depender de herramientas externas ni andar haciendo malabares con scripts, anonimización de datos de producción o soluciones caseras que reinventan la rueda. Se trata de un pequeño gran cambio que, si sabes aprovecharlo, te ahorra tiempo, esfuerzo y más de un dolor de cabeza.
¿Cómo funciona?
La utilidad Data Generator se basa en un concepto llamado Blueprints (Proyectos), que no son más que archivos JSON donde se define la estructura de los datos a generar: tablas, columnas y tipos asociados.
Podemos crear un Blueprint a partir de tablas ya existentes en el esquema de base de datos asociado a nuestro workspace, construirlo desde cero o incluso importar uno ya creado. Una vez configurado, el Blueprint se convierte en el centro de operaciones, y desde la vista en árbol (a la izquierda de la interfaz) podemos trabajar con sus dos componentes principales: Tablas y Tipos de Datos Personalizados.
Tablas
Aquí es donde definimos la estructura de cada tabla, incluyendo atributos como el nombre y el número de filas que queremos generar (hasta un máximo de 500.000, siendo 50 el valor por defecto). Podemos añadir columnas a cada tabla y, para cada columna, seleccionar su tipo de dato desde una biblioteca bastante completa.
Una de las opciones más potentes es el tipo Built-in, que incluye desde tipos genéricos (números, fechas, booleanos) hasta categorías más específicas como nombres de personas, direcciones, comida, animales, proyectos, entre otros. Todo listo para usarse.
Custom Data Sources
Si los tipos predefinidos no se ajustan a lo que necesitas, puedes crear tus propias fuentes de datos personalizadas. Estas pueden basarse en tablas existentes dentro de tu esquema o bien definirse a través de consultas SQL. Una vez creadas, puedes asignarlas a las columnas que quieras dentro de tus tablas, ampliando enormemente la flexibilidad del generador.
¿Y luego qué?
Con el Blueprint ya definido, puedes previsualizar los datos o directamente generarlos. Tienes varias opciones de salida: descargar los datos en formato CSV, JSON o SQL, o insertarlos directamente en las tablas del esquema de tu workspace APEX.
Y para los que prefieren (o necesitan) trabajar desde código, hay buenas noticias: no todo queda en la interfaz declarativa. Existe una API PL/SQL llamada APEX_DG_DATA_GEN
que te permite realizar todo esto de forma programática, ideal para automatizaciones o integraciones más avanzadas.
Pongamos esto en práctica…
Para evitar repetir el clásico ejemplo de Empleados y Departamentos, voy a apoyarme en un conjunto de datos un poco más entretenido: una tabla de personas, y otra de mascotas, vinculadas entre si con una relación uno-a-muchos. No es que cambie demasiado la aproximación, pero al menos así dejamos de ver a SMITH y HR…
Paso 1: Definir las tablas (Quick SQL)
Partimos de la siguiente definición en Quick SQL, que puedes ejecutar directamente desde Oracle APEX - si os parece, puedo hablar en otro post de esta otra utilidad:
dg_personas
id /pk
nombre vc255 /not null
apellidos vc255 /not null
email vc255 /not null /unique
telefono vc255
dg_mascotas
id /pk
persona_id /references dg_personas
nombre vc255 /not null
tipo vc255 /not null
fecha_nacimiento date
Esto nos genera el DDL necesario para tener las dos tablas relacionadas. Una vez que están creadas en nuestro esquema, vamos a generar datos para poblarlas.
💡 Tip: Para facilitar la visualización del resultado de este ejercicio, voy a crear directamente una aplicación APEX usando el script generado como punto de partida. Basta con seguir el asistente habitual y montar una app sencilla con un par de informes interactivos sobre las tablas
DG_PERSONAS
yDG_MASCOTAS
.
Paso 2: Crear el Blueprint o Proyecto
Volvemos ahora a Utilidades, y desde Data Generator, creamos un nuevo proyecto desde cero. Vamos a trabajar con dos tablas: DG_PERSONAS
y DG_MASCOTAS
, así que veamos la configuración de cada una de ellas en los siguientes pasos.
En la opción de creación del nuevo proyecto, podemos escoger hacerlo utilizando tablas existentes, lo cual nos puede ahorrar algunos clicks. Para el propósito de este ejercicio, seguiré el camino más largo para asegurarnos de cubrir el máximo de opciones posibles.
Paso 3: Configurar la tabla DG_PERSONAS
Agregamos una nueva tabla llamada DG_PERSONAS
y definimos las siguientes columnas:
Columna | Data Source | Valor |
ID | Built-In | number.guid |
NOMBRE | Built-In | person.first_name |
APELLIDOS | Built-In | person.last_name |
Fórmula | lower({ [`NOMBRE} | |
TELEFONO | Built-In | phone.us_phone_number |
Esto nos generará una lista realista de personas con nombres, emails construidos dinámicamente y teléfonos ficticios (en formato estadounidense, en este caso).
Además, podemos observar cómo usamos una fórmula para construir el valor del campo EMAIL
a partir de las columnas NOMBRE
y APELLIDOS
. Esta capacidad de combinar campos abre muchas posibilidades para generar datos más coherentes o personalizados.
Paso 4: Configurar la tabla DG_MASCOTAS
Ahora creamos la tabla DG_MASCOTAS
y añadimos las siguientes columnas:
Columna | Data Source | Valor |
ID | Built-In | number.guid |
PERSONA_ID | Blueprint | DG_PERSONAS.ID |
NOMBRE | Built-In | pet.pet_name |
TIPO | Built-In | pet.pet_type |
FECHA_NACIMIENTO | Built-In | date.random |
La columna PERSONA_ID
se relaciona directamente con el ID generado en la tabla DG_PERSONAS
, estableciendo así la relación entre mascota y dueño.
Ahora, podemos incluso ajustar el número de registros generados para cada tabla, por ejemplo: 50 personas y 100 mascotas, y así asegurar una distribución de datos realista.
Paso 5: Previsualizar y generar
Haz clic en Previsualizar para validar los datos y luego en Generar. Puedes optar por:
Descargar los datos como CSV, JSON o SQL.
Insertarlos directamente en las tablas
DG_PERSONAS
yDG_MASCOTAS
.
Nota: en este punto, también podemos exportar nuestro proyecto o Blueprint para llevarlo a otro entorno Oracle APEX, para poder ejecutarlo directamente donde necesitemos.
Paso 6: Comprobar nuestra app con datos
Por último, ejecutamos la app que habíamos creado en el primer paso, para visualizar como nuestros Informes Interactivos ahora cuentan con datos, en unos pocos clicks.
Bonus: generar datos desde PL/SQL (sin Blueprint)
Por último, si solo necesitamos generar datos de una fuente concreta, sin pasar por todo el proceso de crear un Blueprint completo, también podemos hacer uso de la correspondiente API PL/SQL.
La utilidad APEX_DG_DATA_GEN.GET_EXAMPLE
nos permite obtener un conjunto de datos simulados a partir de cualquier tipo de dato disponible en el generador.
Por ejemplo, si queremos generar una lista de 100 nombres comunes de animales:
select *
from apex_dg_data_gen.get_example(
p_friendly_name => 'animal.common_name',
p_rows => 100 );
O si preferimos obtener 100 fechas aleatorias:
select *
from apex_dg_data_gen.get_example(
p_friendly_name => 'date.random',
p_rows => 100 );
Ambos ejemplos devuelven una columna llamada SAMPLE_VALUE
con datos sintéticos realistas, sin necesidad de configurar nada más.
💡 Esto resulta muy útil para pruebas rápidas, demos o simplemente para explorar el contenido de las distintas categorías que ofrece la herramienta.
Algunas limitaciones a tener en cuenta
Aunque Data Generator es una herramienta muy potente y práctica, también tiene algunas limitaciones que conviene tener en mente para no frustrarse:
Volumen limitado: El número máximo de registros que puedes generar por tabla es 500.000. Más que suficiente en muchos casos, pero puede quedarse corto para pruebas de rendimiento serias.
Tipos de datos algo genéricos: Aunque la biblioteca de tipos es extensa, en ciertos escenarios específicos (como datos financieros complejos o estructuras jerárquicas profundas) puede que necesites apoyarte en fuentes personalizadas o lógica adicional.
Dependencia del formato de salida: Si eliges insertar los datos directamente en las tablas, asegúrate de que las estructuras coincidan exactamente. De lo contrario, puede fallar silenciosamente o generar errores poco claros (claves primarias / foráneas, constraints, etc).
Personalización algo limitada en la interfaz: Algunas fórmulas o reglas condicionales complejas pueden ser difíciles (o imposibles) de definir desde el generador visual. Ahí es donde el uso de la API PL/SQL se vuelve clave.
Sin anonimización real: Aunque puedes usar Data Generator para reemplazar datos sensibles con valores ficticios, no ofrece mecanismos específicos de anonimización o preservación de relaciones como sí hacen herramientas más especializadas.
En resumen, es ideal para prototipos, pruebas funcionales, demos o refrescos rápidos de datos. Para necesidades más avanzadas, sigue siendo un complemento, no un sustituto total de soluciones más complejas.
Conclusión
Data Generator ha llegado para quedarse como una de esas pequeñas y no tan populares joyas dentro del ecosistema Oracle APEX. Puede que no se trate de una herramienta revolucionaria, pero sí que resulta tremendamente útil cuando se trata de poblar nuestras apps con datos creíbles sin ningún descalabro por el camino.
Ya sea cuando nos encontremos montando un prototipo, preparando una demo, haciendo pruebas funcionales, o que simplemente seamos un poco perezosos y queramos evitar construir scripts con datos duros de producción, esta utilidad nos ahorra tiempo y esfuerzo sin casi darnos cuenta.
Y lo mejor de todo: está integrada en APEX, es declarativa (aunque también scriptable), y seguro que los nuevos avances en integración de IA en la mejor herramienta low-code del momento nos permite ver mejoras en esta utilidad.
Si todavía no la has probado, este es el momento perfecto para darle una vuelta. Espero que con este pequeño ejemplo como apoyo, y en cuestión de minutos, tengas tus tablas llenas de datos listos para probar, enseñar o romper.
Por último, si necesitas acceder a la app que he mostrado (con alguna pequeña modificación), o al ejemplo del blueprint que hemos creado durante esta entrada, tienes disponibles los correspondientes archivos en GitHub, a través de este enlace con instrucciones de como usarlos.
¡Gracias por estar aquí!
Happy coding,
Juan L.
Subscribe to my newsletter
Read articles from Juan López García directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Juan López García
Juan López García
I am a technology professional with about a decade of experience in software development, specialising in Oracle APEX. My career began in telecommunications engineering, but my passion for technology and software development led me to transition into this field. Since then, I have been deeply involved in leading teams and driving digital transformation across various projects. As a part of my daily tasks, I focus on fostering collaboration, efficiency, and technical excellence, ensuring that the projects where I'm involved embrace digital advancements effectively. I take great pride in sharing my knowledge and experience, whether through mentorship, conferences, or engaging with the tech community.