Concetti per gli sviluppatori di database

Lo sviluppatore di Oracle Database crea e gestisce un'applicazione di database. Questa sezione presenta una breve panoramica di ciò che fa uno sviluppatore di database e degli strumenti di sviluppo disponibili.

Doveri degli sviluppatori di database

Uno sviluppatore Oracle è responsabile della creazione o la gestione dei componenti del database di un'applicazione che utilizza lo stack tecnologico Oracle.

Gli sviluppatori Oracle sviluppano nuove applicazioni o convertono le applicazioni esistenti per l'esecuzione nell'ambiente Oracle Database. Per questo motivo, gli sviluppatori lavorano a stretto contatto con gli amministratori del database, condividendo conoscenze e informazioni.

Gli sviluppatori di database Oracle possono aspettarsi di essere coinvolti nelle seguenti attività:

Vedere anche:

Strumenti per sviluppatori di database

Oracle fornisce diversi strumenti da utilizzare per lo sviluppo di applicazioni di database. Questa sezione descrive alcuni strumenti di sviluppo comunemente utilizzati.

SQL Developer

SQL Developer è un modo conveniente per gli sviluppatori di database di modificare e sviluppare attività di base utilizzando SQL*Plus. SQL Developer è una versione grafica di SQL*Plus, scritta in Java, che supporta lo sviluppo in SQL e PL/SQL. È possibile connettersi a qualsiasi schema di database Oracle utilizzando l'autenticazione del database standard. SQL Developer consente di:

SQL Developer è disponibile nell'installazione predefinita di Oracle Database e tramite download gratuito.

Vedere anche: Oracle AI Database Introduzione allo sviluppo di Oracle AI Database e Oracle SQL Developer User's Guide per scoprire come utilizzare SQL Developer

Generatore di applicazioni AI Oracle APEX

Oracle APEX AI Application Generator è uno strumento di sviluppo di applicazioni Web per Oracle Database. Oracle APEX AI Application Generator utilizza funzionalità integrate come temi dell'interfaccia utente, controlli di navigazione, gestori di moduli e report flessibili per accelerare lo sviluppo delle applicazioni.

Oracle APEX viene installato con il database ed è costituito da dati in tabelle e codice PL/SQL. Quando si esegue un'applicazione, il browser invia una richiesta di URL tradotta in una chiamata PL/SQL Oracle APEX. Dopo l'elaborazione del database PL/SQL, i risultati vengono ritrasmessi al browser come HTML. Questo ciclo si verifica ogni volta che si richiede o si sottomette una pagina.

È possibile utilizzare Oracle APEX con il gateway PL/SQL incorporato. Il gateway viene eseguito nel server HTTP Oracle XML DB nel database e fornisce l'infrastruttura necessaria per creare applicazioni dinamiche. Come illustrato nella Figura 23-1, il gateway PL/SQL incorporato semplifica l'architettura dell'applicazione eliminando il livello intermedio.

Figura 1: APEX con gateway PL/SQL incorporato

Descrizione dell'illustrazione cncpt317.gif

Oracle JDeveloper

Oracle JDeveloper è un ambiente di sviluppo integrato (IDE, Integrated Development Environment) per la creazione di applicazioni orientate ai servizi che utilizzano gli più recenti standard di settore per Java, XML, Web Services e SQL. Oracle JDeveloper supporta il ciclo di vita completo dello sviluppo software, con funzioni integrate per la modellazione, la codifica, il debug, il test, la profilazione, l'ottimizzazione e la distribuzione delle applicazioni.

Oracle JDeveloper utilizza le finestre per vari strumenti di sviluppo delle applicazioni. Ad esempio, quando si crea un'applicazione Java, è possibile utilizzare strumenti quali l'editor visivo Java e la tavolozza dei componenti. Oltre a questi strumenti, Oracle JDeveloper offre una gamma di navigatori che consentono di organizzare e visualizzare i contenuti dei progetti.

Vedere anche:

Oracle Developer Tools for Visual Studio .NET

Oracle Developer Tools for Visual Studio .NET è un set di strumenti applicativi integrati con l'ambiente Visual Studio .NET. Gli strumenti Oracle Developer Tools for Visual Studio .NET consentono all'utente di eseguire un'ampia gamma di compiti di sviluppo delle applicazioni e migliorano l'efficienza dello sviluppo e la facilità di utilizzo.

Gli strumenti Oracle Developer supportano la programmazione e l'implementazione di stored procedure .NET mediante l'uso di Visual Basic, C# e altri linguaggi .NET. Queste procedure sono scritte in un linguaggio .NET e contengono istruzioni SQL o PL/SQL.

Argomenti per gli sviluppatori di database

Questa sezione tratta gli argomenti che sono più essenziali per gli sviluppatori di database e che non sono stati discussi altrove nel manuale.

Principi di Application Design e Tuning

Gli sviluppatori Oracle devono progettare, creare e ottimizzare le applicazioni di database in modo da raggiungere gli obiettivi di sicurezza e prestazioni.

I seguenti principi di progettazione e ottimizzazione delle applicazioni sono linee guida utili:

Vedere anche:

Principi delle query corrette

Le query delle applicazioni del mondo reale possono essere molto complesse, con molti join, e queste sono sorprendentemente spesso non corrette in tutti i casi angolari, specificando esplicitamente il ritorno di un risultato errato, anche nelle istruzioni SQL in esecuzione nei sistemi di produzione per lunghi periodi producendo errori inosservati. Questa sezione spiega come analizzare sistematicamente e per evitare il più importante di questi errori SQL fin troppo comuni.

Le query possono sembrare molto complesse. Possono fare riferimento a decine di tabelle, includere viste create su altre viste e utilizzare subquery nelle clausole WITH, nell'elenco SELECT e nella clausola WHERE. Sotto questa complessità, una buona query risponde ancora a una domanda chiara. Questa domanda di solito riflette la necessità di dati su un insieme di un particolare tipo di entità aziendali. Ogni riga restituita dalla query deve rappresentare un'istanza di tale entità. Per le query GROUP BY, ogni riga deve rappresentare un'aggregazione su istanze della stessa entità.

Nella maggior parte dei sistemi, ogni tipo di entità aziendale abbastanza importante da eseguire una query dispone di una tabella corrispondente le cui righe rappresentano tale entità. In questo senso, molte query ben scritte, indipendentemente dalla complessità dell'aspetto, sono in definitiva domande sulle righe di una singola tabella. La complessità circostante in genere esiste perché i database normalizzati memorizzano gli attributi di un'entità nelle tabelle correlate, ad esempio le tabelle padre, le tabelle padre e così via.

Ad esempio, una progettazione normalizzata in genere memorizza il nome di un cliente una volta in una tabella CUSTOMERS. Una tabella ORDERS memorizza solo CUSTOMER_ID in modo che possa eseguire il join a CUSTOMERS. Una tabella ORDER_ITEMS memorizza ORDER_ID in modo che possa unirsi a ORDERS e non ripetere CUSTOMER_ID. Se vogliamo elencare un sottoinsieme di ORDER_ITEMS insieme al nome del cliente per ogni articolo, abbiamo bisogno di una sequenza di join univoci, prima a ORDERS (il padre) e poi a CUSTOMERS (il nonno). Nei sistemi OLTP ben normalizzati, le query possono richiedere molti join di questo tipo per recuperare informazioni dettagliate su un singolo tipo di entità, anche se il set di risultati mappa ancora uno a uno a un subset di righe da una tabella "primaria".

Chiamiamo questa tabella primaria la tabella allargata a righe (RWT). In una query corretta, gli altri join dovrebbero in genere "allargare" ogni riga RWT aggiungendo dati di lookup corrispondenti in modo univoco da tabelle padre, tabelle nonne e così via. Tali join non devono moltiplicare il numero di righe RWT. Le query con questa struttura per tutti i join che iniziano logicamente dall'RWT sono solo query che allargano le righe (RWOQ). Nota: l'applicazione di filtri può eliminare le righe RWT. I join interni e i predicati WHERE possono rimuovere le righe dall'RWT. "Row-widened" non significa che la query preserva tutte le righe RWT. Ciò significa che, dopo l'applicazione di filtri e prima di qualsiasi aggregazione, ogni riga di risultato della query corrisponde strettamente uno a uno alle righe RWT rimanenti.

Se ogni altra tabella della query è raggiungibile tramite una catena di join univoci da una singola tabella che rappresenta le entità restituite o aggregate dalla query, tale tabella iniziale è l'RWT e la query è un RWOQ. Se non è possibile garantire alcuna tabella tramite chiavi univoche per mappare una a una alle righe dei risultati di preaggregazione, la query non è una RWOQ. In pratica, la maggior parte dei non-RWOQ produce risultati che non possono essere interpretati correttamente dall'applicazione perché la query non mappa in modo pulito le righe dei risultati a un'entità ben definita e significativa per l'azienda. La somma dei valori di tali righe, ad esempio, aggiungerebbe lo stesso valore per la stessa entità più volte, lasciando un totale privo di senso.

A partire da Oracle Database Release 26ai, la funzione JOIN TO ONE facilita notevolmente la scrittura di RWOQ corretti. Quando si utilizza JOIN TO ONE per tutti i join, il database verifica in fase di analisi che la query sia una query RWOQ, trattando la tabella più a sinistra nella clausola FROM come RWT, supponendo che l'oggetto sia una tabella di base anziché una vista che potrebbe nascondere un funzionamento non RWOQ. Se il database non è in grado di dimostrare l'univocità dei join JOIN TO ONE al momento dell'analisi, esegue controlli di runtime per verificare che ogni join del presunto RWT rimanga univoco per i dati rilevati al momento dell'esecuzione. Se rileva un join non univoco nei risultati effettivi, genera un errore di runtime. La maggior parte dei RWOQ può essere convertita in formato JOIN TO ONE. Le query che non possono essere convertite nel modulo JOIN TO ONE in genere rivelano join irregolari nel tentativo di conversione. Quando la query convertita viene eseguita senza errori di runtime, tale risultato fornisce una forte conferma che la query ha la proprietà one-row-per-entity desiderata.

Per ulteriori dettagli sugli RWOQ, sul motivo per cui aiutano a prevenire sottili problemi di correttezza in SQL e sul modo in cui JOIN TO ONE li applica, consulta la Guida allo sviluppo di Oracle AI Database.

Programmazione database lato client

Puoi utilizzare precompilatori o traduttori Java per inserire istruzioni SQL nel codice sorgente, oppure puoi utilizzare le API per consentire alle applicazioni di interagire con il database.

Esistono due tecniche di base che consentono alle applicazioni di database procedurali di utilizzare SQL: la programmazione lato server con PL/SQL e Java, e la programmazione lato client con precompilatori e API come Java Database Connectivity (JDBC) o Oracle Call Interface (OCI).

Vedere anche:

Oracle AI Database Development Guide per scoprire come scegliere un ambiente di programmazione

Programmazione lato server: PL/SQL e Java da rivedere

SQL incorporato

In passato, i programmi client/server utilizzavano SQL incorporato per interagire con il database.

Precompilatori Oracle

I programmi client/server vengono in genere scritti utilizzando un precompiler di Oracle, uno strumento di programmazione che consente di incorporare istruzioni SQL in programmi di alto livello.

Ad esempio, il precompilatore Oracle Pro*C/C++ consente di incorporare le istruzioni SQL in un file sorgente C o C++. I precompilatori Oracle sono disponibili anche per COBOL e FORTRAN.

Un precompilatore offre diversi vantaggi, tra cui:

L'applicazione client che contiene le istruzioni SQL è il programma host. Questo programma è scritto nella lingua ospite. Nel programma host, è possibile combinare istruzioni SQL complete con istruzioni C complete e utilizzare variabili C o strutture nelle istruzioni SQL. Quando si incorporano le istruzioni SQL, è necessario iniziarle con le parole chiave EXEC SQL e terminarle con un punto e virgola. Pro*C/C++ converte le istruzioni EXEC SQL in chiamate alla libreria di runtime SQLLIB.

Molte istruzioni SQL incorporate differiscono dalle loro controparti interattive solo attraverso l'aggiunta di una nuova clausola o l'uso di variabili di programma. Nell'esempio seguente vengono confrontate le istruzioni ROLLBACK interattive e incorporate.

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

Le istruzioni hanno lo stesso effetto, ma è possibile utilizzare la prima in un ambiente SQL interattivo (ad esempio SQL Developer) e la seconda in un programma Pro*C/C++.

Il precompilatore accetta il programma host come input, converte le istruzioni SQL incorporate in chiamate standard alla libreria di runtime del database e genera un programma fonte modificato che è possibile compilare, collegare ed eseguire nel modo consueto. La Figura 23-2 illustra i passaggi tipici per lo sviluppo di programmi che utilizzano precompilatori.

Figura 2: Sviluppo del programma con precompilatori

Descrizione dell'illustrazione cncpt253.gif

Vedere anche: Pro*C/C++ Developer's Guide per una descrizione completa del precompilatore Pro*C/C++

API lato client

La maggior parte degli sviluppatori oggi utilizza un'API per incorporare SQL nelle proprie applicazioni di database.

Ad esempio, due API più diffuse per consentire ai programmi di comunicare con Oracle Database sono Open Database Connectivity (ODBC) e JDBC. Oracle Call Interface (OCI) e Oracle C++ Call Interface (OCCI) sono altre due API comuni per la programmazione lato client.

OCI e OCCI

In alternativa ai precompilatori, Oracle fornisce le API OCI e OCCI.

OCI consente di manipolare dati e schemi in un database utilizzando un linguaggio di programmazione host come C. OCCI è un'interfaccia orientata agli oggetti adatta per l'uso con C++. Entrambe le API consentono agli sviluppatori di utilizzare i richiami nativi dei sottoprogrammi per accedere a Oracle Database e controllare l'esecuzione SQL.

In alcuni casi, OCI offre prestazioni migliori o più funzioni rispetto a interfacce di livello più elevato. OCI e OCCI forniscono molte funzioni, tra cui:

OCI e OCCI forniscono una libreria di funzioni standard di accesso al database e recupero sotto forma di libreria runtime dinamica (OCILIB). Questa libreria può essere collegata in un'applicazione in fase di esecuzione. Pertanto, puoi compilare e collegare un programma OCI o OCCI allo stesso modo di un'applicazione non di database, evitando un passo di pre-elaborazione o pre-compilazione separato. La Figura 23-3 illustra il processo di sviluppo.

Figura 3: Processo di sviluppo che utilizza OCI o OCCI

Descrizione dell'illustrazione cncpt307.gif

Vedere anche:

ODBC e JDBC

ODBC è un'API standard che consente alle applicazioni di connettersi a un database e quindi di preparare ed eseguire istruzioni SQL.

ODBC è indipendente da linguaggio di programmazione, database e sistema operativo. L'obiettivo di ODBC è quello di consentire a qualsiasi applicazione di accedere ai dati contenuti in qualsiasi database.

Un driver di database è un software che si trova tra un'applicazione e il database. Il driver traduce le chiamate API effettuate dall'applicazione in comandi che il database può elaborare. Utilizzando un driver ODBC, un'applicazione può accedere a qualsiasi origine dati, inclusi i dati memorizzati in fogli di calcolo. Il driver ODBC esegue tutti i mapping tra lo standard ODBC e il database.

Il driver Oracle ODBC fornito da Oracle consente alle applicazioni conformi a ODBC di accedere a Oracle Database. Ad esempio, un'applicazione scritta in Visual Basic può utilizzare ODBC per eseguire query e aggiornare le tabelle in un database Oracle.

JDBC è un'interfaccia Java di basso livello che consente alle applicazioni Java di interagire con il database Oracle. Come ODBC, JDBC è un'API indipendente dal fornitore. Lo standard JDBC è definito da Sun Microsystems e implementato tramite le interfacce java.sql.

Lo standard JDBC consente ai singoli provider di implementare ed estendere lo standard con i propri driver JDBC. Oracle fornisce i seguenti driver JDBC per la programmazione lato client:

Gli snippet riportati di seguito provengono da un programma Java che utilizza il driver OCI JDBC per creare un oggetto Statement ed eseguire una query sulla tabella dual.

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

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

Vedi anche: Oracle AI Database Development Guide e Oracle AI Database Guida introduttiva allo sviluppo Java per ulteriori informazioni su JDBC

Supporto per la globalizzazione

Il supporto della globalizzazione di Oracle Database consente di memorizzare, elaborare e recuperare i dati nelle lingue di origine.

Il supporto alla globalizzazione consente di sviluppare applicazioni e software multilingue a cui è possibile accedere ed eseguire contemporaneamente da qualsiasi parte del mondo.

Gli sviluppatori che scrivono un'applicazione di database globalizzata devono effettuare le operazioni riportate di seguito.

Ad esempio, potrebbe essere necessaria un'applicazione per eseguire il rendering del contenuto dell'interfaccia utente ed elaborare i dati nelle lingue e nelle preferenze locali degli utenti nativi. Ad esempio, l'applicazione deve elaborare dati Kanji multibyte, visualizzare messaggi e date nel formato regionale appropriato ed elaborare dati ASCII a 7 bit senza richiedere agli utenti di modificare le impostazioni.

Ambiente di supporto alla globalizzazione

L'ambiente di supporto alla globalizzazione include l'applicazione client e il database. È possibile controllare le operazioni dipendenti dalla lingua impostando i parametri e le variabili di ambiente sul client e sul server, che possono esistere in posizioni separate. Nota: nelle release precedenti, Oracle faceva riferimento alle funzionalità di supporto alla globalizzazione come funzioni del National Language Support (NLS). NLS è in realtà un sottoinsieme del supporto alla globalizzazione e offre la possibilità di scegliere una lingua nazionale e memorizzare i dati in un set di caratteri specifico.

Oracle Database fornisce supporto per la globalizzazione per funzioni quali:

Set di caratteri

Un componente chiave del supporto della globalizzazione è un set di caratteri, che è uno schema di codifica utilizzato per visualizzare i caratteri su uno schermo del computer.

La seguente distinzione è importante nello sviluppo delle applicazioni:

Un gruppo di caratteri (ad esempio, caratteri alfabetici, ideografi, simboli, segni di punteggiatura e caratteri di controllo) può essere codificato come set di caratteri. Un set di caratteri codificato assegna un codice numerico univoco, chiamato code point o valore codificato, a ciascun carattere del set. I punti codice sono importanti in un ambiente globale a causa della potenziale necessità di convertire i dati tra set di caratteri diversi.

L'industria informatica utilizza molti set di caratteri codificati. Questi set differiscono per il numero di caratteri disponibili, i caratteri disponibili per l'uso, i punti di codice assegnati a ciascun carattere e così via. Oracle Database supporta La maggior parte delle norme codificate nazionali, internazionali e specifiche del fornitore.

Oracle Database supporta le seguenti classi di set di caratteri codificati:

Vedere anche: Oracle AI Database Globalization Support Guide per ulteriori informazioni sulla migrazione dei set di caratteri

Impostazioni specifiche della versione locale

Un'impostazione locale è un ambiente linguistico e culturale in cui viene eseguita un sistema o un programma. I parametri NLS determinano un funzionamento specifico delle impostazioni nazionali sia sul client che sul database.

Una sessione di database utilizza le impostazioni NLS durante l'esecuzione delle istruzioni per conto di un client. Ad esempio, il database utilizza correttamente il separatore delle migliaia per un client. In genere, la variabile di ambiente NLS_LANG sull'host client specifica le impostazioni nazionali sia per la sessione del server che per l'applicazione client. Il processo viene illustrato di seguito.

  1. All'avvio di un'applicazione client, l'ambiente NLS viene inizializzato dalle impostazioni dell'ambiente.

    Tutte le operazioni NLS eseguite localmente, ad esempio la visualizzazione della formattazione nelle applicazioni Oracle Developer, utilizzano queste impostazioni.

  2. Il client comunica le informazioni definite da NLS_LANG al database quando si connette.

  3. La sessione del database inizializza il proprio ambiente NLS in base alle impostazioni comunicate dal client.

    Se il client non ha specificato le impostazioni, la sessione utilizza le impostazioni nel file dei parametri di inizializzazione. Il database utilizza le impostazioni dei parametri di inizializzazione solo se il client non ha specificato alcuna impostazione NLS. Se il client ha specificato alcune impostazioni NLS, le impostazioni NLS rimanenti sono predefinite.

Ogni sessione avviata per conto di un'applicazione client può essere eseguita in impostazioni nazionali uguali o diverse rispetto ad altre sessioni. Ad esempio, una sessione può utilizzare la versione locale tedesca mentre un'altra la versione locale francese. Inoltre, ogni sessione può avere gli stessi requisiti linguistici o diversi specificati.

La tabella seguente mostra due client che utilizzano impostazioni NLS_LANG diverse. Un utente avvia SQL*Plus su ciascun host, accede allo stesso database di hr ed esegue la stessa query contemporaneamente. Il risultato per ogni sessione è diverso a causa dell'impostazione NLS specifica per le impostazioni nazionali per i numeri a virgola mobile.

Tabella 1 Impostazioni NLS specifiche delle versioni locali

t Host client 1 Host client 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

Vedere anche: Oracle AI Database Globalization Support Guide per ulteriori informazioni sulle impostazioni NLS

Oracle Globalization Development Kit

Oracle Globalization Development Kit (GDK) include API di programmazione complete.

Le API sono disponibili sia per Java che per PL/SQL e includono esempi di codice e documentazione che risolvono molti dei problemi di progettazione, sviluppo e distribuzione riscontrati durante la creazione di applicazioni globali. Il GDK semplifica il processo di sviluppo e riduce i costi di sviluppo di applicazioni Internet utilizzate per supportare un ambiente globale.

Il GDK si compone principalmente di due parti: GDK per Java e GDK per PL/SQL. GDK per Java fornisce supporto per la globalizzazione alle applicazioni Java. GDK per PL/SQL fornisce supporto alla globalizzazione per l'ambiente di programmazione PL/SQL. Le caratteristiche offerte nelle due parti non sono identiche.

Vedi anche: Oracle AI Database Globalization Support Guide

Dati non strutturati

I dati non strutturati sono dati che non sono suddivisi in strutture logiche più piccole.

Il modello relazionale tradizionale si occupa di dati strutturati semplici che si adattano a tabelle semplici. Oracle Database fornisce inoltre supporto per i dati non strutturati, che non possono essere scomposti in componenti standard. I dati non strutturati includono testo, immagini grafiche, video clip e forme d'onda sonore.

Oracle Database include tipi di dati per gestire contenuti non strutturati. Questi tipi di dati vengono visualizzati come tipi nativi nel database e possono essere interrogati utilizzando SQL.

Panoramica dell'XML in Oracle Database

Oracle XML DB è un set di tecnologie Oracle Database correlate alla manipolazione, allo storage e al recupero XML ad alte prestazioni. Oracle XML DB fornisce supporto XML nativo includendo modelli di dati sia SQL che XML in modo interoperabile.

Oracle XML DB è adatto a qualsiasi applicazione Java o PL/SQL in cui alcuni o tutti i dati elaborati dall'applicazione vengono rappresentati utilizzando XML. Ad esempio, l'applicazione può avere un numero elevato di documenti XML che devono essere inclusi, generati, convalidati e cercati.

Oracle XML DB offre numerose funzioni, tra cui:

L'esempio seguente crea una tabella orders di 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')));

Nell'esempio precedente viene inoltre creato un oggetto directory SQL, che è un nome logico nel database per una directory fisica nel computer host. Questa directory contiene file XML. Nell'esempio viene inserito il contenuto XML dal file purOrder.xml nella tabella orders.

Il kit per sviluppatori Oracle XML (XDK) contiene i componenti di base per la lettura, la manipolazione, la trasformazione e la visualizzazione dei documenti XML, sia su un file system che in un database. API e strumenti sono disponibili per Java, C e C++. La produzione di Oracle XDK viene fornita con una licenza di ridistribuzione commerciale.

Esempio 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')));

Vedere anche:

Panoramica di JSON in Oracle Database

Oracle Database fornisce supporto nativo per i dati JavaScript Object Notation (JSON), tra cui l'esecuzione di query e l'indicizzazione.

Questa sezione contiene gli argomenti riportati di seguito.

Cos'è JSON?

JavaScript Object Notation (JSON) è un formato di dati basato su testo indipendente dal linguaggio che può rappresentare oggetti, array e dati scalari. Una vasta gamma di linguaggi di programmazione può analizzare e generare dati JSON.

JSON funge in genere da linguaggio di interscambio di dati. Viene spesso utilizzato per serializzare i dati strutturati e scambiarli su una rete, in genere tra un server e applicazioni Web. JSON è il formato di dati dominante nei browser Web che eseguono applicazioni scritte in HTML-embedded JavaScript.

Un oggetto JavaScript è un array associativo di zero o più coppie di nomi di proprietà e valori JSON associati. Un oggetto JSON è un valore di oggetto JavaScript, che viene scritto come lista di proprietà racchiusa tra parentesi graffe, con coppie nome-valore separate da virgole e con il nome e il valore di ogni coppia separati da due punti. Una proprietà oggetto viene talvolta chiamata chiave. Una coppia nome-valore di una proprietà oggetto viene talvolta chiamata membro di un oggetto.

Esempio di oggetto JSON 23-2

Questo esempio mostra un oggetto JSON che rappresenta un ordine di acquisto, con i nomi di proprietà di livello superiore PONumber, Reference, Requestor, User, Costcenter, ShippingInstruction, Special Instructions, AllowPartialShipment e 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 } ] }

Nell'esempio precedente, la maggior parte delle proprietà contiene valori stringa. I valori numerici sono PONumber, zipCode, ItemNumber e Quantity. Shipping Instructions e Address hanno oggetti come valori. LineItems ha un array come valore.

Nota: Oracle XML DB Developer's Guide per una panoramica più completa di JSON

JSON e XML

Sia JSON che XML sono comunemente utilizzati come linguaggi di interscambio dati. A differenza dei dati relazionali, entrambi i dati JSON e XML possono essere memorizzati, indicizzati e sottoposti a query nel database senza alcuno schema che definisca i dati.

A causa della sua semplice definizione e funzionalità, i dati JSON sono generalmente più facili da generare, analizzare ed elaborare rispetto ai dati XML. È anche più facile per gli esseri umani imparare e usare. Nella tabella seguente vengono descritte ulteriori differenze tra JSON e XML.

Tabella 2 Differenze tra JSON e XML

Funzione JSON XML
Utile per dati semplici e strutturati Sì Sì, ma supporta anche dati semistrutturati e dati strutturati complessi
Utile per contenuto misto N. Sì
Non dispone di attributi, spazi di nomi, eredità e sostituzione Sì N.
Importanza degli ordini N. Sì
Principalmente destinato a documenti piuttosto che dati N. Sì
Include un tipo di dati data N. Sì

Nota: Oracle AI Database JSON Developer's Guide per un confronto più completo di XML e JSON

Supporto database nativo per JSON

JSON è ampiamente memorizzato in database noSQL privi di funzioni di database relazionali. Al contrario, Oracle Database supporta JSON in modo nativo con funzionalità come transazioni, indicizzazione, query dichiarative e viste.

Puoi accedere ai dati JSON memorizzati nel database allo stesso modo in cui accedi ad altri dati del database, tra cui OCI, .NET e JDBC. Il modo preferito per memorizzare i dati JSON è utilizzare il tipo di dati JSON, che è un formato binario proprietario ottimizzato per l'elaborazione di query e DML. È possibile utilizzare il tipo di dati JSON nella maggior parte delle posizioni in cui è consentito un tipo di dati SQL, incluso un tipo di colonna o un tipo di parametro per una program unit PL/SQL.

Utilizzando Oracle SQL, puoi eseguire operazioni quali le seguenti sui dati JSON:

I dati JSON testuali utilizzano sempre il set di caratteri Unicode, UTF8 o UTF16. Oracle Database utilizza UTF8 internamente quando analizza ed esegue query sui dati JSON. Se i dati immessi o generati da tale elaborazione devono trovarsi in un set di caratteri diverso da UTF8, la conversione del set di caratteri appropriata viene eseguita automaticamente. Nota: Oracle AI Database JSON Developer's Guide per una panoramica più completa del supporto JSON in Oracle Database

Panoramica dei LOB

I tipi di dati LOB (Large Object) consentono di memorizzare e manipolare grandi blocchi di dati non strutturati in formato binario o a caratteri.

Il tipo di dati large object (LOB) fornisce un accesso efficiente, casuale e dettagliato ai dati.

LOB interni

Un LOB interno memorizza i dati nel database stesso anziché in file esterni.

I LOBS interni includono quanto segue:

Il database memorizza i LOB in modo diverso rispetto ad altri tipi di dati. La creazione di una colonna LOB crea implicitamente un segmento LOB e un indice LOB. La tablespace contenente il segmento LOB e l'indice LOB, sempre memorizzati insieme, può essere diversa dalla tablespace contenente la tabella.

Nota: a volte il database può memorizzare piccole quantità di dati LOB nella tabella stessa anziché in un segmento LOB separato.

Il segmento LOB memorizza i dati in parti denominate chunk. Un chunk è un insieme logicamente contiguo di blocchi di dati ed è l'unità di allocazione più piccola per un LOB. Una riga della tabella memorizza un puntatore denominato locator LOB, che punta all'indice LOB. Quando viene eseguita una query sulla tabella, il database utilizza l'indice LOB per individuare rapidamente i chunk LOB.

Il database gestisce la coerenza delle letture per i segmenti LOB in modo diverso dagli altri dati. Invece di utilizzare i dati di annullamento per registrare le modifiche, il database memorizza le immagini precedenti nel segmento stesso. Quando una transazione cambia un LOB, il database alloca un nuovo chunk e lascia i vecchi dati in posizione. Se viene eseguito il rollback della transazione, il database esegue il rollback delle modifiche apportate all'indice, che punta al vecchio chunk.

Vedere anche:

LOB esterni

Un oggetto BFILE (file binario di grandi dimensioni o LOB) è un oggetto di grandi dimensioni esterno.

Un BFILE è un LOB esterno, poiché il database memorizza un puntatore a un file nel sistema operativo. I dati esterni sono di sola lettura.

Un BFILE utilizza un oggetto directory per individuare i dati. La quantità di spazio consumata dipende dalla lunghezza del nome dell'oggetto directory e dalla lunghezza del nome file.

Un file BFILE non utilizza lo stesso meccanismo di coerenza delle letture di LOBS interno perché il file binario è esterno al database. Se i dati nel file cambiano, le letture ripetute dallo stesso file binario possono produrre risultati diversi.

SecureFiles

SecureFiles LOB storage è uno dei due tipi di archiviazione; l'altro tipo è BasicFiles LOB storage.

Il parametro LOB SECUREFILE consente funzioni avanzate, tra cui compressione e deduplicazione (parte dell'opzione di compressione avanzata) e cifratura (parte dell'opzione di sicurezza avanzata). A partire da Oracle Database 12c, SecureFiles è il meccanismo di storage predefinito per i LOB.

Vedere anche:

Panoramica di Oracle Text

Oracle Text (Text) è una tecnologia di recupero full-text integrata con Oracle Database. Oracle Text indicizza qualsiasi documento o contenuto testuale memorizzato in file system, database o sul Web. La ricerca di questi documenti può essere eseguita in base al contenuto testuale, ai metadati o agli attributi.

In Oracle Text sono disponibili i vantaggi riportati di seguito.

Per un caso d'uso, si supponga di dover creare un indice di catalogo per una sede d'asta che vende apparecchiature elettroniche. Il nuovo inventario viene aggiunto ogni giorno. Le descrizioni degli articoli, le date dell'offerta e i prezzi devono essere memorizzati insieme. L'applicazione richiede un buon tempo di risposta per le query miste. In primo luogo, creare e popolare una tabella catalog. Utilizzare quindi Oracle Text per creare un indice CTXCAT che è possibile eseguire una query con l'operatore CATSEARCH in un'istruzione SELECT ... WHERE CATSEARCH. La Figura 23-4 illustra la relazione della tabella del catalogo, il relativo indice CTXCAT e l'applicazione del catalogo che utilizza l'operatore CATSEARCH per eseguire una query sull'indice.

Figura 4: Applicazione query catalogo

Descrizione dell'illustrazione ccapp017.gif

Vedere anche:

Panoramica di Oracle Spatial and Graph

Oracle Spatial and Graph (Spatial and Graph) include funzioni avanzate per l'analisi e i dati spaziali, nonché per applicazioni grafiche fisiche, logiche, di rete, social e semantiche.

Le funzioni spaziali forniscono uno schema e funzioni che facilitano la memorizzazione, il recupero, l'aggiornamento e la query delle raccolte di funzioni spaziali in un database Oracle. Un esempio di dati spaziali è una road map. I dati spaziali indicano la posizione della Terra (come longitudine e latitudine) degli oggetti sulla mappa. Quando la mappa viene visualizzata, questi dati spaziali possono proiettare le posizioni degli oggetti su un foglio di carta bidimensionale. Un sistema di informazione geografica (GIS) può memorizzare, recuperare e rendere questi dati spaziali relativi alla Terra. Quando un database Oracle memorizza questi dati spaziali, è possibile utilizzare Spatial and Graph per manipolare e recuperare questi dati e correlarli ad altri dati.

Vedere anche: Oracle Spatial Developer's Guide

Panoramica dei grafici delle proprietà SQL

La funzione Property Graph di Oracle Database offre un potente supporto grafico per Oracle Database.

La funzione Grafico struttura consente di esplorare e scoprire relazioni complesse in set di dati quali dati dei clienti, social network e transazioni finanziarie, per applicazioni in consigli sui prodotti, rilevamento delle frodi, analisi dei rischi, marketing mirato e altro ancora. Questa funzione di grafico ad alte prestazioni offre supporto avanzato del linguaggio di query dei grafici, API per sviluppatori e funzionalità di analitica con quasi 60 algoritmi predefiniti.

Le funzioni Property Graph, incluso il supporto di PGQL (Property Graph Query Language), sono disponibili da Oracle Database 12.2 in poi. A partire da Oracle Database Release 26ai, è inoltre possibile creare ed eseguire query sui grafici delle proprietà utilizzando SQL, come definito nello standard SQL:2023.

Oracle Graph Server and Client è un pacchetto software che funziona con la funzione Property Graph in Oracle Database. Include strumenti grafici, librerie client e Oracle Graph Server per l'esecuzione di algoritmi di analitica dei grafici.

Argomenti correlati