Conceptos para Desarrolladores de Bases de Datos

El desarrollador de Oracle Database crea y mantiene una aplicación de base de datos. En esta sección se presenta una breve visión general de lo que hace un desarrollador de bases de datos y las herramientas de desarrollo disponibles.

Funciones de los desarrolladores de bases de datos

Los desarrolladores de Oracle se encargan de crear o mantener los componentes de base de Datos de una aplicación que utiliza la pila tecnológica Oracle.

Los programadores de Oracle desarrollan aplicaciones nuevas o convierten las aplicaciones existentes para que se ejecuten en un entorno de la Oracle Database. Por este motivo, los desarrolladores trabajan en estrecha colaboración con los administradores de la base de datos, compartiendo conocimientos e información.

Los desarrolladores de bases de datos Oracle pueden esperar participar en las siguientes tareas:

Consulte además:

Herramientas para desarrolladores de bases de datos

Oracle proporciona varias herramientas para su uso en el desarrollo de aplicaciones de base de datos. En esta sección se describen algunas herramientas de desarrollo de uso común.

SQL Developer

SQL Developer es una forma práctica para que los desarrolladores de bases de datos editen y desarrollen tareas básicas mediante SQL*Plus. SQL Developer es una versión gráfica de SQL*Plus, escrita en Java, que soporta el desarrollo en SQL y PL/SQL. Puede conectarse a cualquier esquema de base de datos Oracle mediante la autenticación de base de datos estándar. SQL Developer le permite:

SQL Developer está disponible en la instalación por defecto de Oracle Database y se puede descargar de forma gratuita.

Consulte también: Oracle AI Database Get Started with Oracle AI Database Development y Oracle SQL Developer User's Guide para aprender a utilizar SQL Developer

Generador de aplicaciones Oracle APEX AI

Oracle APEX AI Application Generator es una herramienta de desarrollo de aplicaciones web para Oracle Database. Oracle APEX AI Application Generator utiliza funciones integradas, como temas de interfaz de usuario, controles de navegación, manejadores de formularios e informes flexibles, para acelerar el desarrollo de aplicaciones.

Oracle APEX se instala con la base de datos y consta de datos en tablas y código PL/SQL. Al ejecutar una aplicación, el explorador envía una solicitud de URL que se traduce en una llamada PL/SQL de Oracle APEX. Después de que la base de datos procese el PL/SQL, los resultados se vuelven a transmitir al explorador como HTML. Este ciclo se produce cada vez que se solicita o se envía una página.

Puede utilizar Oracle APEX con el gateway PL/SQL embebido. El gateway se ejecuta en el servidor HTTP de Oracle XML DB de la base de datos y proporciona la infraestructura necesaria para crear aplicaciones dinámicas. Como se muestra en la Figura 23-1, el gateway PL/SQL embebido simplifica la arquitectura de la aplicación al eliminar la capa media.

Figura 1: APEX con gateway PL/SQL incrustado

Descripción de la ilustración cncpt317.gif

Oracle JDeveloper

Oracle JDeveloper es un entorno de desarrollo integrado (IDE) para crear aplicaciones orientadas a servicios con los últimos estándares de la industria para Java, XML, servicios web y SQL. Oracle JDeveloper soporta todo el ciclo de vida de desarrollo de software, con funciones integradas para modelar, codificar, depurar, probar, crear perfiles, ajustar y desplegar aplicaciones.

Oracle JDeveloper utiliza ventanas para diversas herramientas de desarrollo de aplicaciones. Por ejemplo, al crear una aplicación Java, puede utilizar herramientas como Java Visual Editor y Component Palette. Además de estas herramientas, Oracle JDeveloper proporciona una serie de navegadores que le ayudarán a organizar y ver el contenido de los proyectos.

Consulte además:

Oracle Developer Tools para Visual Studio .NET

Oracle Developer Tools for Visual Studio .NET es un conjunto de herramientas de aplicación integradas con el entorno .NET de Visual Studio. Las herramientas Oracle Developer Tools for Visual Studio .NET proporcionan acceso de interfaz gráfica de usuario a la función de Oracle, permiten al usuario realizar una amplia gama de tareas del desarrollo y son capaces de mejorar la productividad de desarrollo y facilidad de uso.

Oracle Developer Tools permite la programación e implementación de procedimientos almacenados .NET con Visual Basic, C#, y otros lenguajes .NET. Estos procedimientos se escriben en un lenguaje .NET y contienen sentencias SQL o PL/SQL.

Temas para desarrolladores de bases de datos

En esta sección se tratan los temas que son más esenciales para los desarrolladores de bases de datos y que no se han tratado en ningún otro lugar del manual.

Principios de Diseño y Ajuste de Aplicaciones

Los desarrolladores de Oracle deben diseñar, crear y ajustar aplicaciones de base de datos para que alcancen los objetivos de seguridad y rendimiento.

Los siguientes principios de diseño y ajuste de aplicaciones son directrices útiles:

Consulte además:

Principios de las consultas correctas

Las consultas de aplicaciones reales pueden ser muy complejas, con muchas uniones, y estas suelen no ser correctas en todos los casos de esquina, especificando explícitamente la devolución de un resultado erróneo, incluso en SQL que se ejecuta en sistemas de producción durante largos períodos que producen errores inadvertidos. En esta sección se explica cómo analizar sistemáticamente y evitar el más importante de estos errores SQL demasiado comunes.

Las consultas pueden parecer muy complejas. Pueden hacer referencia a decenas de tablas, incluir vistas creadas a partir de otras vistas y utilizar subconsultas en las cláusulas WITH, la lista SELECT y la cláusula WHERE. Debajo de esa complejidad, una buena consulta todavía responde a una pregunta clara. Esta pregunta suele reflejar la necesidad de datos sobre un juego de un tipo concreto de entidades de negocio. Cada fila devuelta por la consulta debe representar una instancia de esa entidad. Para las consultas GROUP BY, cada fila debe representar una agregación en instancias de la misma entidad.

En la mayoría de los sistemas, cada tipo de entidad de negocio lo suficientemente importante como para consultar tiene una tabla correspondiente cuyas filas representan esa entidad. En ese sentido, muchas consultas bien escritas, sin importar cuán complejas sean, son en última instancia preguntas sobre filas de una sola tabla. La complejidad que la rodea suele existir porque las bases de datos normalizadas almacenan atributos de una entidad en tablas relacionadas, como tablas principales, tablas principales, etc.

Por ejemplo, un diseño normalizado suele almacenar el nombre de un cliente una vez en una tabla CUSTOMERS. Una tabla ORDERS almacena solo CUSTOMER_ID para que se pueda unir a CUSTOMERS. Una tabla ORDER_ITEMS almacena ORDER_ID para que se pueda unir a ORDERS y no repite CUSTOMER_ID. Si queremos mostrar un subjuego de ORDER_ITEMS junto con el nombre de cliente de cada artículo, necesitamos una secuencia de uniones únicas, primero a ORDERS (el principal) y, a continuación, a CUSTOMERS (el abuelo). En sistemas OLTP bien normalizados, las consultas pueden requerir muchas de estas uniones para recuperar información detallada sobre un único tipo de entidad, aunque el juego de resultados aún se asigne de uno a uno a un subjuego de filas de una tabla "principal".

Llamamos a esa tabla primaria la tabla ampliada por filas (RWT). En una consulta correcta, las otras uniones normalmente deben "ampliar" cada fila RWT agregando datos de consulta coincidentes de forma única de las tablas principales, las tablas principales y demás. Esas uniones no deben multiplicar el número de filas de RWT. Las consultas con esta estructura para todas las uniones que comienzan lógicamente desde el RWT son solo consultas de ampliación de filas (RWOQ). Nota: El filtrado puede descartar filas RWT. Las uniones internas y los predicados WHERE pueden eliminar filas del RWT. "Fila ampliada" no significa que la consulta conserve todas las filas de RWT. Significa que, después del filtrado y antes de cualquier agregación, cada fila de resultado de consulta se corresponde estrictamente de uno a uno con las filas de RWT restantes.

Si se puede acceder a todas las demás tablas de la consulta mediante una cadena de uniones únicas de una única tabla que representa las entidades que devuelve o agrega la consulta, esa tabla inicial es el RWT y la consulta es un RWOQ. Si no se puede garantizar que ninguna tabla, a través de claves únicas, se asigne de uno a uno a las filas de resultados anteriores a la agregación, la consulta no es un RWOQ. En la práctica, la mayoría de los no RWOQ producen resultados que la aplicación no puede interpretar correctamente porque la consulta no asigna correctamente las filas de resultados a una entidad bien definida y significativa para el negocio. La suma de valores de dichas filas, por ejemplo, agregaría el mismo valor para la misma entidad varias veces, dejando un total que no tiene sentido.

A partir de la versión 26ai de Oracle Database, la función JOIN TO ONE ayuda mucho a escribir los RWOQ correctos. Al utilizar JOIN TO ONE para todas las uniones, la base de datos comprueba en el momento del análisis que la consulta es un RWOQ, tratando la tabla situada más a la izquierda en la cláusula FROM como el RWT, suponiendo que el objeto es una tabla base en lugar de una vista que puede ocultar el comportamiento que no es de RWOQ. Si la base de datos no puede demostrar la unicidad de las uniones JOIN TO ONE en el momento del análisis, realiza comprobaciones de tiempo de ejecución para verificar que cada unión del RWT supuesto sigue siendo única para los datos encontrados en el momento de la ejecución. Si detecta una unión no única en los resultados reales, genera un error de tiempo de ejecución. La mayoría de los RWOQ se pueden convertir a un formulario JOIN TO ONE. Las consultas que no se pueden convertir al formulario JOIN TO ONE suelen revelar uniones irregulares en el intento de conversión. Cuando la consulta convertida se ejecuta sin errores de tiempo de ejecución, ese resultado proporciona una confirmación sólida de que la consulta tiene la propiedad de una fila por entidad deseada.

Para obtener más información sobre los RWOQ, por qué ayudan a evitar problemas sutiles de corrección en SQL y cómo JOIN TO ONE los aplica, consulte la Guía de desarrollo de Oracle AI Database.

Programación de bases de datos de cliente

Puede utilizar precompiladores o traductores de Java para colocar sentencias SQL en el código fuente, o bien puede utilizar API para permitir que las aplicaciones interactúen con la base de datos.

Existen dos técnicas básicas que permiten a las aplicaciones de bases de datos de procedimiento utilizar SQL: la programación del lado del servidor con PL/SQL y Java, y la programación del lado del cliente con precompiladores y API como Java Database Connectivity (JDBC) u Oracle Call Interface (OCI).

Consulte además:

Oracle AI Database Development Guide para aprender a elegir un entorno de programación

Programación en el servidor: PL/SQL y Java para revisar

SQL embebido

Históricamente, los programas cliente/servidor han utilizado SQL embebido para interactuar con la base de datos.

Precompiladores de Oracle

Los programas cliente/servidor se escriben normalmente con un precompilador de Oracle, que es una herramienta de programación que permite embeber sentencias SQL en programas de alto nivel.

Por ejemplo, el precompilador Oracle Pro*C/C++ permite embeber sentencias SQL en un archivo de origen C o C++. Los precompiladores de Oracle también están disponibles para COBOL y FORTRAN.

Un precompilador proporciona varias ventajas, incluidas las siguientes:

La aplicación cliente que contiene las sentencias SQL es el programa host. Este programa está escrito en el idioma anfitrión. En el programa host, puede combinar sentencias SQL completas con sentencias C completas y utilizar variables o estructuras C en sentencias SQL. Al embeber sentencias SQL, debe comenzarlas con las palabras clave EXEC SQL y terminarlas con un punto y coma. Pro*C/C++ convierte las sentencias EXEC SQL en llamadas a la biblioteca en tiempo de ejecución SQLLIB.

Muchas sentencias SQL embebidas difieren de sus contrapartes interactivas sólo mediante la adición de una nueva cláusula o el uso de variables de programa. En el siguiente ejemplo se comparan las sentencias ROLLBACK interactivas y embebidas:

ROLLBACK;           -- interactive
EXEC SQL ROLLBACK;  -- embedded

Las sentencias tienen el mismo efecto, pero debe utilizar la primera en un entorno SQL interactivo (como SQL Developer) y la segunda en un programa Pro*C/C++.

Un precompilador acepta el programa de host como entrada, traduce las sentencias SQL embebidas en llamadas de biblioteca de tiempo de ejecución de base de datos estándar y genera un programa de fuente que puede compilar, enlazar y ejecutar de la forma habitual. La Figura 23-2 ilustra los pasos típicos del desarrollo de programas que utilizan precompiladores.

Figura 2: Desarrollo de programas con precompiladores

Descripción de la ilustración cncpt253.gif

Consulte también: Guía del desarrollador de Pro*C/C++ para obtener una descripción completa del precompilador de Pro*C/C++

API de cliente

La mayoría de los desarrolladores utilizan hoy en día una API para embeber SQL en sus aplicaciones de base de datos.

Por ejemplo, dos API populares para permitir que los programas se comuniquen con Oracle Database son Open Database Connectivity (ODBC) y JDBC. Oracle Call Interface (OCI) y Oracle C++ Call Interface (OCCI) son otras dos API comunes para la programación del cliente.

OCI y OCCI

Como alternativa a los precompiladores, Oracle proporciona las API de OCI y OCCI.

OCI permite manipular datos y esquemas en una base de datos mediante un lenguaje de programación de host como C. OCCI es una interfaz orientada a objetos adecuada para su uso con C++. Ambas API permiten a los desarrolladores utilizar llamadas de subprograma nativas para acceder a Oracle Database y controlar la ejecución de SQL.

En algunos casos, OCI proporciona un mejor rendimiento o más funciones que las interfaces de nivel superior. OCI y OCCI proporcionan muchas funciones, incluidas las siguientes:

OCI y OCCI proporcionan una biblioteca de funciones de acceso y recuperación de bases de datos estándar en forma de una biblioteca dinámica en tiempo de ejecución (OCILIB). Esta biblioteca se puede enlazar en una aplicación en tiempo de ejecución. Por lo tanto, puede compilar y enlazar un programa OCI u OCCI de la misma forma que una aplicación que no sea de base de datos, evitando un paso de preprocesamiento o precompilación independiente. La Figura 23-3 ilustra el proceso de desarrollo.

Figura 3: Proceso de desarrollo mediante OCI u OCCI

Descripción de la ilustración cncpt307.gif

Consulte además:

ODBC y JDBC

ODBC es una API estándar que permite a las aplicaciones conectarse a una base de datos y, a continuación, preparar y ejecutar sentencias SQL.

ODBC es independiente del lenguaje de programación, la base de datos y el sistema operativo. El objetivo de ODBC es permitir que cualquier aplicación acceda a los datos contenidos en cualquier base de datos.

Un controlador de base de datos es el software que se encuentra entre una aplicación y la base de datos. El controlador traduce las llamadas de API realizadas por la aplicación en comandos que la base de datos puede procesar. Mediante el uso de un controlador ODBC, una aplicación puede acceder a cualquier fuente de datos, incluidos los datos almacenados en hojas de cálculo. El controlador ODBC realiza todas las asignaciones entre el estándar ODBC y la base de datos.

El controlador ODBC de Oracle proporcionado por Oracle permite a las aplicaciones compatibles con ODBC acceder a Oracle Database. Por ejemplo, una aplicación escrita en Visual Basic puede utilizar ODBC para consultar y actualizar tablas en una base de datos Oracle.

JDBC es una interfaz Java de bajo nivel que permite a las aplicaciones Java interactuar con la base de datos Oracle. Al igual que ODBC, JDBC es una API independiente del proveedor. El estándar JDBC es definido por Sun Microsystems e implementado mediante las interfaces java.sql.

El estándar JDBC permite a los proveedores individuales implementar y ampliar el estándar con sus propios controladores JDBC. Oracle proporciona los siguientes controladores JDBC para la programación del cliente:

Los siguientes fragmentos proceden de un programa Java que utiliza el controlador JDBC OCI para crear un objeto Statement y consultar la tabla dual:

// Create a statement
Statement stmt = conn.createStatement();

// Query dual table
ResultSet rset = stmt.executeQuery("SELECT 'Hello World' FROM DUAL");

Consulte también: Guía de desarrollo de Oracle AI Database y Oracle AI Database: introducción al desarrollo de Java para obtener más información sobre JDBC

Soporte de Globalización

El soporte de globalización de Oracle Database permite almacenar, procesar y recuperar datos en lenguas maternas.

El soporte de globalización permite desarrollar aplicaciones y software multilingües a los que se puede acceder y ejecutar desde cualquier parte del mundo simultáneamente.

Los desarrolladores que escriben la aplicación de base de datos globalizada deben hacer lo siguiente:

Por ejemplo, puede ser necesario que una aplicación represente contenido de la interfaz de usuario y procese datos en idiomas y preferencias de configuración regional de usuarios nativos. Por ejemplo, la aplicación debe procesar datos kanji multibyte, mostrar mensajes y fechas en el formato regional adecuado y procesar datos ASCII de 7 bits sin necesidad de que los usuarios cambien la configuración.

Entorno de Soporte de Globalización

El entorno de soporte de globalización incluye la aplicación cliente y la base de datos. Puede controlar las operaciones que dependen del idioma definiendo parámetros y variables de entorno en el cliente y el servidor, que pueden existir en ubicaciones separadas. Nota: En versiones anteriores, Oracle hacía referencia a las capacidades de soporte de globalización como funciones de soporte de idioma nacional (NLS). NLS es en realidad un subconjunto de apoyo a la globalización y proporciona la capacidad de elegir un idioma nacional y almacenar datos en un juego de caracteres específico.

Oracle Database proporciona soporte de globalización para funciones como:

Juegos de caracteres

Un componente clave de la compatibilidad con la globalización es un conjunto de caracteres, que es un esquema de codificación utilizado para mostrar caracteres en la pantalla de un equipo.

La siguiente distinción es importante en el desarrollo de aplicaciones:

Un grupo de caracteres (por ejemplo, caracteres alfabéticos, ideogramas, símbolos, signos de puntuación y caracteres de control) se puede codificar como un conjunto de caracteres. Un conjunto de caracteres codificados asigna un código numérico único, denominado punto de código o valor codificado, a cada carácter del conjunto. Los puntos de código son importantes en un entorno global debido a la posible necesidad de convertir datos entre diferentes juegos de caracteres.

La industria informática utiliza muchos conjuntos de caracteres codificados. Estos conjuntos difieren en el número de caracteres disponibles, los caracteres disponibles para su uso, los puntos de código asignados a cada carácter, etc. Oracle Database soporta la mayoría de las normas de juegos de caracteres codificados tanto nacionales, internacionales como específicos de proveedores.

Oracle Database soporta las siguientes clases de juegos de caracteres codificados:

Consulte también: Guía de soporte de globalización de Oracle AI Database para obtener información sobre la migración de juegos de caracteres

Configuración específica de la configuración regional

Una configuración regional es un entorno lingüístico y cultural en el que se está ejecutando un sistema o programa. Los parámetros NLS determinan el comportamiento específico de la configuración regional tanto en el cliente como en la base de datos.

Una sesión de base de datos utiliza valores NLS al ejecutar sentencias en nombre de un cliente. Por ejemplo, la base de datos realiza el uso correcto del territorio del separador de miles para un cliente. Normalmente, la variable de entorno NLS_LANG del host de cliente especifica la configuración regional tanto para la sesión de servidor como para la aplicación de cliente. El proceso es el siguiente:

  1. Cuando se inicia una aplicación cliente, se inicializa el entorno NLS del cliente a partir de la configuración del entorno.

    Todas las operaciones NLS realizadas localmente, como mostrar el formato en las aplicaciones de Oracle Developer, utilizan esta configuración.

  2. El cliente comunica la información definida por NLS_LANG a la base de datos cuando se conecta.

  3. La sesión de base de datos inicializa su entorno NLS en función de la configuración comunicada por el cliente.

    Si el cliente no ha especificado la configuración, la sesión utiliza la configuración en el archivo de parámetros de inicialización. La base de datos utiliza los valores de los parámetros de inicialización sólo si el cliente no ha especificado ningún valor NLS. Si el cliente especificó algunos valores de NLS, el resto de valores de NLS por defecto.

Cada sesión iniciada en nombre de una aplicación cliente puede ejecutarse en la misma configuración regional o en una diferente que otras sesiones. Por ejemplo, una sesión puede utilizar la configuración regional alemana mientras que otra utiliza la configuración regional francesa. Además, cada sesión puede tener los mismos o diferentes requisitos de idioma especificados.

En la siguiente tabla, se muestran dos clientes que utilizan diferentes valores de NLS_LANG. Un usuario inicia SQL*Plus en cada host, se conecta a la misma base de datos que hr y ejecuta la misma consulta simultáneamente. El resultado de cada sesión difiere debido a la configuración NLS específica de la configuración regional para los números de coma flotante.

Tabla 1 Configuración de NLS específica de la configuración regional

t Host del Cliente 1 Host del Cliente 2
t0
$ NLS_LANG=American_America.US7ASCII
$ export NLS_LANG 
$ NLS_LANG=German_Germany.US7ASCII
$ export NLS_LANG
t1
$ sqlplus /nolog 
SQL> CONNECT hr@proddb 
Enter password: ******* 
SQL> SELECT 999/10 FROM DUAL;
  
999/10  
----------  
99.9
$ sqlplus /nolog  
SQL> CONNECT hr@proddb  
Enter password: *******  
SQL> SELECT 999/10 FROM DUAL; 
  
999/10  
----------  
99,9

Consulte también: Guía de soporte de globalización de Oracle AI Database para obtener información sobre la configuración de NLS

Oracle Globalization Development Kit

Oracle Globalization Development Kit (GDK) incluye API de programación completas.

Las API están disponibles tanto para Java como para PL/SQL, e incluyen ejemplos de código y documentación que abordan muchos de los problemas de diseño, desarrollo y despliegue encontrados al crear aplicaciones globales. El GDK simplifica el proceso de desarrollo y reduce el costo del desarrollo de aplicaciones de Internet utilizadas para soportar un entorno global.

El GDK consta principalmente de dos partes: GDK para Java y GDK para PL/SQL. GDK para Java proporciona soporte de globalización para aplicaciones Java. GDK para PL/SQL proporciona soporte de globalización para el entorno de programación PL/SQL. Las características ofrecidas en las dos partes no son idénticas.

Consulte también: Guía de soporte de globalización de Oracle AI Database

Datos no estructurados

Los datos no estructurados son datos que no se dividen en estructuras lógicas más pequeñas.

El modelo relacional tradicional trata de datos estructurados simples que encajan en tablas simples. Oracle Database también proporciona soporte para datos no estructurados, que no se pueden descomponer en componentes estándar. Los datos no estructurados incluyen texto, imágenes gráficas, clips de vídeo y formas de onda de sonido.

Oracle Database incluye tipos de datos para manejar contenido no estructurado. Estos tipos de dato aparecen como tipos nativos en la base de datos y se pueden consultar mediante SQL.

Visión General de XML en Oracle Database

Oracle XML DB es un juego de tecnologías de Oracle Database relacionadas con la manipulación, el almacenamiento y la recuperación de XML de alto rendimiento. Oracle XML DB proporciona soporte XML nativo mediante la integración de modelos de datos SQL y XML de forma interoperable.

Oracle XML DB es adecuado para cualquier aplicación Java o PL/SQL en la que algunos o todos los datos procesados por la aplicación se representen mediante XML. Por ejemplo, la aplicación puede tener un gran número de documentos XML que se deben ingerir, generar, validar y buscar.

Oracle XML DB proporciona muchas funciones, entre las que se incluyen las siguientes:

En el siguiente ejemplo se crea una tabla orders de tipo XMLType:

CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO orders
  VALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));

El ejemplo anterior también crea un objeto de directorio SQL, que es un nombre lógico en la base de datos para un directorio físico en el equipo host. Este directorio contiene archivos XML. En el ejemplo, se inserta contenido XML del archivo purOrder.xml en la tabla orders.

Oracle XML Developer's Kit (XDK) contiene los componentes básicos para leer, manipular, transformar y ver documentos XML, ya sea en un sistema de archivos o en una base de datos. Las API y herramientas están disponibles para Java, C y C++. Oracle XDK de producción incluye una licencia de redistribución comercial.

Ejemplo 23-1 XMLType

CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO orders
  VALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));

Consulte además:

Visión general de JSON en Oracle Database

Oracle Database proporciona soporte nativo para datos JavaScript de notación de objetos (JSON), incluidas las consultas y la indexación.

Esta sección incluye los siguientes temas:

¿Qué es JSON?

JavaScript Object Notation (JSON) es un formato de datos basado en texto independiente del lenguaje que puede representar objetos, matrices y datos escalares. Una variedad de lenguajes de programación pueden analizar y generar datos JSON.

JSON suele servir como lenguaje de intercambio de datos. A menudo se utiliza para serializar datos estructurados e intercambiarlos a través de una red, normalmente entre un servidor y aplicaciones web. JSON es el formato de datos dominante en los exploradores web que ejecutan aplicaciones escritas en JavaScript incrustado en HTML.

Un objeto JavaScript es una matriz asociativa de cero o más pares de nombres de propiedades y valores JSON asociados. Un objeto JSON es un literal de objeto JavaScript, que se escribe como una lista de propiedades entre corchetes, con pares nombre-valor separados por comas y con el nombre y el valor de cada par separados por dos puntos. Una propiedad de objeto a veces se denomina clave. Un par nombre-valor de propiedad de objeto a veces se denomina miembro de objeto.

Ejemplo 23-2 Objeto JSON

En este ejemplo se muestra un objeto JSON que representa un pedido, con los nombres de propiedad de nivel superior PONumber, Reference, Requestor, User, Costcenter, ShippingInstruction, Special Instructions, AllowPartialShipment y LineItems.

{ "PONumber"             : 1600,
  "Reference"            : "ABULL-20140421",
  "Requestor"            : "Alexis Bull",
  "User"                 : "ABULL",
  "CostCenter"           : "A50",
  "ShippingInstructions" : { "name"   : "Alexis Bull",
                             "Address": { "street"  : "200 Sporting Green",
                                          "city"    : "South San Francisco",
                                          "state"   : "CA",
                                          "zipCode" : 99236,
                                          "country" : "United States of America" },
                             "Phone" : [ { "type" : "Office", "number" : "909-555-7307" },
                                         { "type" : "Mobile", "number" : "415-555-1234" } ] },
  "Special Instructions" : null,
  "AllowPartialShipment" : false,
  "LineItems"            : [ { "ItemNumber" : 1,
                               "Part"       : { "Description" : "One Magic Christmas",
                                                "UnitPrice"   : 19.95,
                                                "UPCCode"     : 13131092899 },
                               "Quantity"   : 9.0 },
                             { "ItemNumber" : 2,
                               "Part"       : { "Description" : "Lethal Weapon",
                                                "UnitPrice"   : 19.95,
                                                "UPCCode"     : 85391628927 },
                               "Quantity"   : 5.0 } ] }

En el ejemplo anterior, la mayoría de las propiedades tienen valores de cadena. PONumber, zipCode, ItemNumber y Quantity tienen valores numéricos. Shipping Instructions y Address tienen objetos como valores. LineItems tiene una matriz como valor.

Nota: Guía del desarrollador de Oracle XML DB para obtener una visión general más completa de JSON

JSON y XML

Tanto JSON como XML se utilizan comúnmente como lenguajes de intercambio de datos. A diferencia de los datos relacionales, tanto los datos JSON como los datos XML se pueden almacenar, indexar y consultar en la base de datos sin ningún esquema que defina los datos.

Debido a su simple definición y características, los datos JSON generalmente son más fáciles de generar, analizar y procesar que los datos XML. También es más fácil para los seres humanos aprender y usar. En la siguiente tabla, se describen otras diferencias entre JSON y XML.

Tabla 2 Diferencias entre JSON y XML

Función JSON XML
Útil para datos simples y estructurados Sí Sí, pero también soporta datos semiestructurados y datos estructurados complejos
Útil para contenido mixto No Sí
Falta atributos, espacios de nombres, herencia y sustitución Sí No
Coloca importancia en el pedido No Sí
Principalmente destinado a documentos en lugar de datos No Sí
Incluye un tipo de dato de fecha No Sí

Nota: Oracle AI Database JSON Developer's Guide para una comparación más completa de XML y JSON

Soporte de base de datos nativa para JSON

JSON se almacena ampliamente en bases de datos noSQL que carecen de funciones de base de datos relacional. Por el contrario, Oracle Database soporta JSON de forma nativa con funciones como transacciones, indexación, consultas declarativas y vistas.

Puede acceder a los datos JSON almacenados en la base de datos de la misma forma que accede a otros datos de la base de datos, incluido el uso de OCI, .NET y JDBC. La forma preferida de almacenar datos JSON es utilizar el tipo de dato JSON, que es un formato binario propietario optimizado para el procesamiento de consultas y DML. Puede utilizar el tipo de dato JSON en la mayoría de los lugares donde se permite un tipo de dato SQL, incluido un tipo de columna o un tipo de parámetro para una unidad de programa PL/SQL.

Al utilizar Oracle SQL, puede realizar operaciones como las siguientes en datos JSON:

Los datos JSON textuales siempre utilizan el juego de caracteres Unicode, UTF8 o UTF16. Oracle Database utiliza UTF8 internamente cuando analiza y consulta datos JSON. Si los datos que se introducen o salen de dicho procesamiento deben estar en un juego de caracteres diferente de UTF8, la conversión del juego de caracteres adecuada se realiza automáticamente. Nota: Guía para desarrolladores de Oracle AI Database JSON para obtener una visión general más completa del soporte de JSON en Oracle Database

Visión General de LOB

Los tipos de dato de objeto grande (LOB) permiten almacenar y manipular grandes bloques de datos no estructurados en formato binario o de caracteres.

El tipo de dato large object (LOB) proporciona un acceso eficiente, aleatorio y por partes a los datos.

LOB internos

Un LOB interno almacena datos en la propia base de datos en lugar de en archivos externos.

Los LOB internos incluyen lo siguiente:

La base de datos almacena LOB de forma diferente a otros tipos de dato. Al crear una columna LOB, se crea implícitamente un segmento LOB y un índice LOB. El tablespace que contiene el segmento LOB y el índice LOB, que siempre se almacenan juntos, puede ser diferente del tablespace que contiene la tabla.

Nota: En ocasiones, la base de datos puede almacenar pequeñas cantidades de datos LOB en la propia tabla en lugar de en un segmento LOB independiente.

El segmento LOB almacena datos en partes denominadas fragmentos. Un fragmento es un juego lógicamente contiguo de bloques de datos y es la unidad de asignación más pequeña para un LOB. Una fila de la tabla almacena un puntero denominado localizador LOB, que apunta al índice LOB. Cuando se consulta la tabla, la base de datos utiliza el índice LOB para localizar rápidamente los fragmentos LOB.

La base de datos gestiona la consistencia de lectura para los segmentos LOB de forma diferente a la de otros datos. En lugar de utilizar datos de deshacer para registrar cambios, la base de datos almacena las imágenes anteriores en el propio segmento. Cuando una transacción cambia un LOB, la base de datos asigna un nuevo fragmento y deja los datos antiguos en su lugar. Si se realiza un rollback de la transacción, la base de datos realiza un rollback de los cambios en el índice, que apunta al fragmento antiguo.

Consulte además:

LOB externos

Un BFILE (objeto grande de archivo binario o LOB) es un objeto grande externo.

Un BFILE es un LOB externo, porque la base de datos almacena un puntero a un archivo en el sistema operativo. Los datos externos son de solo lectura.

Un archivo BFILE utiliza un objeto de directorio para localizar datos. La cantidad de espacio consumido depende de la longitud del nombre del objeto de directorio y la longitud del nombre de archivo.

Un archivo BFILE no utiliza el mismo mecanismo de consistencia de lectura que el LOB interno porque el archivo binario es externo a la base de datos. Si los datos del archivo cambian, las lecturas repetidas del mismo archivo binario pueden producir resultados diferentes.

SecureFiles

El almacenamiento LOB SecureFiles es uno de los dos tipos de almacenamiento; el otro tipo es el almacenamiento LOB BasicFiles.

El parámetro LOB SECUREFILE permite funciones avanzadas, como la compresión y la desduplicación (parte de la opción de compresión avanzada) y el cifrado (parte de la opción de seguridad avanzada). A partir de Oracle Database 12c, SecureFiles es el mecanismo de almacenamiento por defecto para los LOB.

Consulte además:

Visión General de Oracle Text

Oracle Text (texto) es una tecnología de recuperación de texto completo integrada con Oracle Database. Oracle Text indexa cualquier documento o contenido textual almacenado en sistemas de archivos, bases de datos o en la Web. Estos documentos se pueden buscar en función de su contenido textual, metadatos o atributos.

Oracle Text ofrece las siguientes ventajas:

Para un caso de uso, supongamos que debe crear un índice de catálogo para un sitio de subasta que vende equipos electrónicos. El nuevo inventario se agrega todos los días. Las descripciones de los artículos, las fechas de las ofertas y los precios se deben almacenar juntos. La aplicación requiere un buen tiempo de respuesta para consultas mixtas. En primer lugar, cree y rellene una tabla catalog. A continuación, utilice Oracle Text para crear un índice CTXCAT que pueda consultar con el operador CATSEARCH en una sentencia SELECT ... WHERE CATSEARCH. La Figura 23-4 ilustra la relación de la tabla de catálogo, su índice CTXCAT y la aplicación de catálogo que utiliza el operador CATSEARCH para consultar el índice.

Figura 4: Aplicación de consulta de catálogo

Descripción de la ilustración ccapp017.gif

Consulte además:

Visión General de Oracle Spatial and Graph

Oracle Spatial and Graph (Spatial and Graph) incluye funciones avanzadas para análisis y datos espaciales y para aplicaciones de gráficos físicos, lógicos, de red y sociales y semánticos.

Las funciones espaciales proporcionan un esquema y funciones que facilitan el almacenamiento, la recuperación, la actualización y la consulta de recopilaciones de funciones espaciales en una base de datos Oracle. Un ejemplo de datos espaciales es una hoja de ruta. Los datos espaciales indican la ubicación de la Tierra (como longitud y latitud) de los objetos en el mapa. Cuando se presenta el mapa, estos datos espaciales pueden proyectar las ubicaciones de los objetos en un pedazo de papel bidimensional. Un sistema de información geográfica (SIG) puede almacenar, recuperar y renderizar estos datos espaciales relativos a la Tierra. Cuando una base de datos Oracle almacena estos datos espaciales, puede utilizar Spatial y Graph para manipular y recuperar estos datos y relacionarlos con otros.

Consulte también: Guía del desarrollador de Oracle Spatial

Visión General de los Gráficos de Propiedades SQL

La función Property Graph de Oracle Database ofrece un potente soporte de gráficos para Oracle Database.

La función Property Graph le permite explorar y descubrir relaciones complejas en conjuntos de datos como datos de clientes, redes sociales y transacciones financieras, para aplicaciones de recomendación de productos, detección de fraudes, análisis de riesgos, marketing dirigido y mucho más. Esta función de gráficos de alto rendimiento ofrece soporte avanzado del lenguaje de consulta de grafos, API de desarrolladores y capacidades de análisis con casi 60 algoritmos predefinidos.

Las funciones de Property Graph, incluido el soporte de PGQL (Property Graph Query Language), están disponibles en Oracle Database 12.2 en adelante. A partir de Oracle Database versión 26ai, también puede crear y consultar gráficos de propiedades mediante SQL, como se define en el estándar SQL:2023.

Oracle Graph Server and Client es un paquete de software que funciona con la función Property Graph de Oracle Database. Incluye herramientas de grafos, bibliotecas de clientes y Oracle Graph Server para ejecutar algoritmos de análisis de grafos.

Temas relacionados