Your SlideShare is downloading. ×
Corso Oracle
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Corso Oracle

2,232
views

Published on

Corso su Oracle Database per aggiornamento operatori ASL Liguria

Corso su Oracle Database per aggiornamento operatori ASL Liguria

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,232
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
79
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Programma
    • Database relazionali
    • Architettura Oracle
    • SQL
    • PL/SQL
    • Introduzione a EMC
  • 2. Testi di riferimento
    • Kevin Loney, George Koch “Oracle 9i. La Guida Completa” Ed. Mc Graw-Hill
    • Abbey, Corey, Abramson “Guida a Oracle 9i. I Fondamenti di Oracle 9i” Ed. Mc Graw-Hill
  • 3. Parte 1 Database relazionali
  • 4. Oracle
    • Architettura indipendente dal sistema
    • Database Relazionale a Oggetti
    • Sistema di Gestione di Database Relazionale (RDBMS), funzioni principali:
      • Inserire dati
      • Reperire dati
      • Mantenere dati
    • Struttura a tabelle
    • Interrogazioni SQL
  • 5. Tabella
    • Citta Temperatura Umidita Condizione
    • ATENE 36 89 SOLE
    • CHICAGO 19 88 PIOGGIA
    • LIMA 7 79 PIOGGIA
    • MANCHESTER 19 98 NEBBIA
    • PARIGI 27 62 NUVOLOSO
    • SPARTA 23 63 NUVOLOSO
    • SYDNEY -5 12 NEVE
  • 6. Query SQL
    • Linguaggio per interagire con il database
    • Esempio:
      • select Citta from CLIMA where Umidita = 89;
    • La sintassi SQL è semplice e chiara anche per chi non è un programmatore.
  • 7. Relazioni
    • Significato di “ Relazionale ”: due o più tabelle sono relazionate se hanno un tipo di dato in comune.
    • Esempio:
      • Tabella CLIMA
      • Tabella DISLOCAZIONE geografica
  • 8. Tabelle di esempio CITTA LONGITUDINE E LATITUDINE N ------------------------- ----------- - ---------- - ATENE 23.43 E 37.58 N CHICAGO 87.38 O 41.53 N CONAKRY 13.43 O 9.31 N LIMA 77.03 O 12.03 S MADRAS 80.17 E 13.05 N MANCHESTER 2.15 O 53.3 N MOSCA 37.35 E 55.45 N PARIGI 2.2 E 48.52 N SHENYANG 123.3 E 41.48 N ROMA 12.29 E 41.54 N TOKYO 139.5 E 35.42 N SYDNEY 151.1 E 33.52 S SPARTA 22.27 E 37.05 N MADRID 3.14 O 40.24 N CITTA CONDIZIONE TEMPERATURA ----------- ----------- ----------- LIMA PIOGGIA 7 PARIGI NUVOLOSO 27 MANCHESTER NEBBIA 19 ATENE SOLE 36 CHICAGO PIOGGIA 19 SYDNEY NEVE -2 SPARTA NUVOLOSO 23
  • 9. Nomi delle colonne dati
    • Utilizzo di codici a struttura predefinita, oppure nomi in lingua corrente.
    • Codice:
      • Esigenza risparmio spazio memoria (ora non più)
      • Per la categorizzazione di molti articoli non è sufficiente la lingua corrente
      • Velocità inserimento (ma lentezza ad addestrare operatori)
    • Abbreviazioni:
      • Riduzione errori inserimento
      • Applicazioni comprensibili
      • Necessita di normalizzazione dei dati
  • 10. Normalizzazione
    • Separazione degli elementi dei dati (nomi, indirizzi, ecc…) in gruppi di affinità
    • Definizione della relazione “normale” tra essi (“corretta”)
  • 11. Biblioteca
    • Tabella di partenza:
      • BIBLIOTECA
        • Titolo
        • Editore
        • Autore 1
        • Autore 2
        • Autore 3
        • Categoria 1
        • Categoria 2
        • Categoria 3
        • Classificazione
        • DescrizioneClassificazione
  • 12. Problematiche
    • Numero di autori limitato
    • Numero di categorie limitato
    • Un aggiornamento dei dettagli delle categorie o dell’autore porta a un riaggiornamento generale della tabella
  • 13. 1° Forma Normale
    • Separazione dei dati in tabelle separate, raggruppando i dati per tipo
    • Esempio:
      • BIBLIOTECA
      • AUTORE
      • AUTORE-BIBLIOTECA
    • Individuazione chiave primaria (etichetta o ID)
  • 14. Biblioteca
    • 1° Forma Normale
  • 15. 2° Forma Normale
    • Selezione dati dipendenti solo da una parte della chiave
    • Spostamento in nuova tabella dei dati indipendenti
    • Esempio:
      • DescrizioneClassificazione non dipende da Titolo, ma da Classificazione
  • 16. Biblioteca
  • 17. 3° Forma Normale
    • Spostare tutti gli elementi delle tabelle che non dipendono unicamente dalla chiave primaria
    • Esempio:
      • Categoria
    • Una volta impostati i dati in 3° Forma Normale, sono automaticamente anche in 1° e 2°
  • 18. Ricerca tra i dati
    • AUTORE
    • NomeAutore Commenti
    • --------------------- -------------------------------------------
    • DIETRICH BONHOEFFER TEOLOGO TEDESCO, UCCISO IN CAMPO DI CONCENTRAMENTO
    • ROBERT BRETALL STUDIOSO DI KIERKEGAARD
    • ALEXANDRA DAY AUTRICE DI LIBRI ILLUSTRATI PER BAMBINI
    • STEPHEN JAY GOULD GIORNALISTA SCIENTIFICO, PROFESSORE AD HARVARD
    • SOREN KIERKEGAARD FILOSOFO E TEOLOGO DANESE
    • HARPER LEE ROMANZIERE AMERICANO, HA PUBBLICATO UN SOLO ROMANZO
    • LUCY MAUD MONTGOMERY SCRITTRICE CANADESE
    • JOHN ALLEN PAULOS PROFESSORE DI MATEMATICA
    • J. RODALE ESPERTO DI GIARDINAGGIO
    • CLASSIFICAZIONE
    • Classificazione DescrizioneClassificazione
    • --------------- --------------------------
    • 1 EVASIONE
    • 2 INFORMAZIONI DI BASE
    • 3 CONSIGLIATO
    • 4 VIVAMENTE CONSIGLIATO
    • 5 LETTURA INDISPENSABILE
  • 19. Ricerca tra i dati
    • CATEGORIA
    • NomeCategoria CategoriaPadre SottoCategoria
    • ------------- -------------- --------------
    • CONSADULTI ADULTI CONSULTAZIONE
    • NARRADULTI ADULTI NARRATIVA
    • SAGGIADULTI ADULTI SAGGI
    • ILLUSRAGAZZI RAGAZZI ILLUSTRATI
    • NARRRAGAZZI RAGAZZI NARRATIVA
    • SAGGIRAGAZZI RAGAZZI SAGGI
    • AUTORE_BIBLIOTECA
    • Titolo NomeAutore
    • ------------------------------ ---------------------
    • TO KILL A MOCKINGBIRD HARPER LEE
    • WONDERFUL LIFE STEPHEN JAY GOULD
    • INNUMERACY JOHN ALLEN PAULOS
    • KIERKEGAARD ANTHOLOGY ROBERT BRETALL
    • KIERKEGAARD ANTHOLOGY SOREN KIERKEGAARD
    • ANNE OF GREEN GABLES LUCY MAUD MONTGOMERY
    • GOOD DOG, CARL ALEXANDRA DAY
    • LETTERS AND PAPERS FROM… DIETRICH BONHOEFFER
  • 20. Ricerca tra i dati
    • BIBLIOTECA
    • Titolo Editore NomeCategoria Classificazione
    • ------------------------------ --------------------- ------------- ------
    • TO KILL A MOCKINGBIRD HARPERCOLLINS NARRADULTI 5
    • WONDERFUL LIFE W.W.NORTON & CO. SAGGIADULTI 5
    • INNUMERACY VINTAGE BOOKS SAGGIADULTI 4
    • KIERKEGAARD ANTHOLOGY PRINCETON UNIV PR CONSADULTI 3
    • ANNE OF GREEN GABLES GRAMMERCY NARRRAGAZZI 3
    • GOOD DOG, CARL LITTLE SIMON ILLUSRAGAZZI 1
    • LETTERS AND PAPERS… SCRIBNER SAGGIADULTI 4
  • 21. Normalizzazione
    • Fa parte del processo di analisi, non di progettazione
    • Le tabelle normalizzate non rappresentano il “progetto” del database
  • 22. Assegnare i nomi
    • Scegliere nomi per tabelle e colonne
      • No alle abbreviazioni incongruenti o arbitrarie
      • Scopo e significato di una tabella devono risultare evidenti
      • Attenzione all’uso del plurale
      • Attenzione agli underscore
      • Case-insensitive nei nomi di tabella e colonna
  • 23. Codici
    • Nomi abbreviati e codificati:
      • BIBLIOTECA A_L AUT CATEGORIE
      • ------------- -------- ------------ --------------
      • titolo titolo autn cat
      • ed autn comm cat_p
      • cat cat_s
      • clas
    • Difficile lettura
    • Necessita di addestramento operatori
    • Difficile anche per il programmatore riprenderla dopo molto tempo
  • 24. Risultato Query SQL
    • select Titolo, NomeAutore from AUTORE_BIBLIOTECA;
    • Titolo NomeAutore
    • ------------------------------ ---------------------
    • TO KILL A MOCKINGBIRD HARPER LEE
    • WONDERFUL LIFE STEPHEN JAY GOULD
    • INNUMERACY JOHN ALLEN PAULOS
    • KIERKEGAARD ANTHOLOGY ROBERT BRETALL
    • KIERKEGAARD ANTHOLOGY SOREN KIERKEGAARD
    • ANNE OF GREEN GABLES LUCY MAUD MONTGOMERY
    • GOOD DOG, CARL ALEXANDRA DAY
    • LETTERS AND PAPERS… DIETRICH BONHOEFFER
  • 25. Comprensione dei compiti
    • Quali compiti deve agevolare l’applicazione?
    • Quali dati servono?
    • Quali dati devono essere elaborati?
    • Quali dati devono essere restituiti?
    • Documentazione da produrre:
      • dei compiti
      • dei dati
  • 26. Chiavi intelligenti
    • Dette anche “chiavi sovraccariche”
    • Esempio di descrizione di una chiave sovraccarica:
      • “ L12348I : Il primo carattere rappresenta il codice della regione. I successivi quattro caratteri rappresentano il numero del catalogo. La cifra finale è il codice del costo centrale, a meno che questo non sia una parte importata, nel qual caso una ‘I’ viene accodata al numero, o a meno che si tratti di un elemento voluminoso, per esempio viti, in cui vengono utilizzate solo tre cifre per il numero del catalogo e il codice della regione è HD”
    • Scomporre in chiavi primarie o esterne
  • 27. Riepilogo
    • Far partecipare gli utenti alla progettazione: nomi, dati, chiavi.
    • Utilizzare nomi comprensibili e facili da memorizzare, in lingua corrente.
    • Non usare codici e abbreviazioni.
    • Utilizzare chiavi significative.
    • Scomporre le chiavi sovraccariche.
    • Analisi e progettazione vanno svolte in funzione sia dei dati sia dei compiti.
    • Spostare le operazioni da svolgere dagli utenti al sistema.
    • Dedicare tempo e attenzione ad analisi, progettazione, test e tuning.
  • 28. Parte 2 Architettura Oracle
  • 29. Panoramica
    • Oracle può essere inserito in architetture a diversi livelli:
      • 2 livelli:
        • Client – Server
      • 3 livelli:
        • Client – Application Server – Database Server
  • 30. Server Oracle
    • Un Server Oracle è costituito da tre componenti:
      • Le strutture di memoria
      • I processi
      • I file fisici
    • In genere con il termine database si fa riferimento esclusivamente ai file fisici, mentre processi e strutture di memoria costituiscono l’istanza.
  • 31. Installazione
    • Supponiamo di aver installato il software in una directory chiamata c:oracle e di aver creato un database chiamato ORCL. La directory c:oracle viene chiamata ORACLE_HOME, e contiene:
      • c:oracleadminORCLpfile
      • c:oracledatabase
      • c:oracleoradataORCL
    • Le prime due contengono il file di inizializzazione, ad esempio init.ora o spfileORCL.ora, cioè il file necessario per informare il sistema della quantità di RAM da allocare ,e quali processi lanciare. Tutte queste informazioni sono memorizzate nel file sotto forma di parametri cui viene assegnato un valore.
    • La directory c:oracleoradataORCL conterrà invece i files che costituiscono il database ORCL.
  • 32. Istanza
    • Per utilizzare il database occorre allocare una struttura che possa interagire con essi.
    • Tale struttura prende il nome di Istanza o Server , ed è costituita da strutture di memoria e processi che lavorano con essa.
  • 33. Strutture di memoria
    • Il sistema legge il file di inizializzazione ( parameter file ) e richiede al sistema operativo una certa quantità di RAM.
    • All’interno della RAM vengono create due tipi di strutture di memoria:
      • La SGA.
      • La PGA.
  • 34. SGA
    • System Global Area
    • E’ costituita da diverse aree di memoria:
      • Redo Log Buffer Cache
      • Database Buffer Cache
      • Shared Pool
      • Large Pool
      • Java Pool
    • Tutti i singoli componenti possono essere dimensionati in maniera opportuna usando i parametri presenti nel file di inizializzazione, ad esempio nell' init.ora .
    • La dimensione totale della SGA è data dalla somma delle dimensioni dei singoli componenti.
  • 35. Schema
    • SGA:
  • 36. RL BC
    • RL BC (Redo Log Buffer Cache)
      • E’ quella parte della memoria in cui vengono registrati tutti i comandi di modifica che vengono lanciati sul database.
      • Lo scopo principale è di garantire la consistenza del database, permettendo al sistema di ripristinare i dati in seguito a crash improvvisi.
      • Se si salva su file tutti i comandi che sono transitati in quest’area, si può ricreare l’intero Db su altre macchine.
  • 37. DB BC
    • DB BC (Data Base Buffer Cache)
      • Quest’area viene utilizzata per memorizzare tutti i dati elaborati dal sistema.
      • Se viene lanciata una query:
        • il sistema accede ai file di pertinenza
        • prende i dati
        • li porta nella DB BC
        • li elabora
        • li restituisce all’utente che ne ha fatto richiesta.
  • 38. Shared Pool Area
    • Shared Pool Area
      • È un’area condivisa, all’interno della quale possiamo distinguere tre sotto aree:
        • Data Dictionary (DD)
        • Library Cache
        • Strutture di controllo
  • 39. Shared Pool Area
    • Il Data Dictionary è il contenitore delle informazioni di sistema:
      • Utenti, le tabelle, le viste, i file, i permessi.
      • Quando viene lanciata una query il sistema controlla se gli oggetti indicati nella query esistono, se l’utente ha i permessi per eseguire quell’operazione, ecc…
  • 40. Shared Pool Area
    • La Library Cache invece è costituita dalla:
      • Shared Sql Area
      • Pl/Sql procedure e package
      • Locks ed altre strutture
    • La Shared Sql Area e’ un’area particolare che contiene le query lanciate sul db, ed il loro codice risultante (non il risultato), il sistema esegue i seguenti passi:
      • Controllo sintassi query SQL
      • Controllo esistenza oggetti
      • Controllo privilegi
      • Controllo indici per velocizzare la query
      • Elaborazione risultato e generazione codice risultante.
  • 41. Shared Pool Area
    • Large Pool
      • Area di memoria opzionale.
      • Puo’ essere configurata per fornire memoria aggiuntiva per alcune particolari operazioni sul database, come il backup od il restore.
      • Se quest’area non è configurata, viene utilizzata la database buffer cache, cosa che potrebbe provocare contese con i dati degli utenti.
    • Java Pool
      • Area opzionale, usata per eseguire al suo interno codice java
  • 42. PGA
    • PGA Program Global Area
      • Contiene informazioni su ogni singolo processo
      • Non è condivisa come la SGA, nel senso che ogni singolo processo di Oracle ha la sua area privata nella quale vengono memorizzate i valori delle variabili, informazioni sulle connessioni, ecc…
      • E’ costituita da 3 aree:
        • stack space
        • informazioni sulla sessione
        • area di ordinamento
  • 43. Processi
    • I processi sono componenti che mettono in relazione tra di loro i vari elementi del server.
    • Ad esempio si occupano di caricare in memoria i dati presenti sui files, elaborano le istruzioni inviate dagli utenti, salvano su file le modifiche ai dati.
    • Ogni database ha un certo numero di processi sempre attivi, mentre altri possono essere attivati solo in particolari configurazioni.
    • Alcuni processi, quelli che hanno una “n” nella loro sigla, possono essere lanciati più volte. Ad esempio il DBWn .
  • 44. DBWn Database Writer
    • Ogni volta che viene modificato un dato, esso viene dapprima modificato in memoria, e poi la modifica viene salvata su file dal DBWn.
    • Il primo DBWn attivato è il DBW0, e si può attivarne altri 9 utilizzando il parametro DB_WRITER_PROCESSES presente nel file di inizializzazione. E’ necessario un hardware adeguato.
    • Quando viene eseguita una modifica ad un dato, viene inizialmente fatta in memoria, in un buffer adeguato. I buffers che sono stati modificati e non ancora salvati su file vengono chiamati Dirty Buffers.
    • Il DBWn scrive i Dirty Buffers sui DF (Data Files). La scrittura avviene in blocco, per ridurre le contese di accesso a disco, e la quantità di blocchi scritti in unica operazione di I/O dipende dal SO.
  • 45. LGWR Log Writer
    • Questo processo si occupa di scrivere sugli RLF (Redo Log Files), in maniera circolare, i buffers della Redo Log Buffer Cache.
    • In pratica si occupa di registrare su file tutti i comandi di modifica che sono transitati nella rispettiva area di memoria.
  • 46. CKPT Chekpoint
    • È un evento che scarica tutti i dati modificati nella buffer cache sui dischi, ed esegue l'update dei CF (file di controllo del database) e dei DF (data files).
    • Più spesso si verifica il Checkpoint, minore sarà il tempo necessario a fare il recovery.
  • 47. SMON System Monitor
    • Si occupa di fare il recovery dell'istanza dopo crash, e controlla il Db all'avvio, appoggiandosi al contenuto dei RLF.
    • Esegue la pulizia dei segmenti temporanei non più usati.
    • In fase di recovery se alcune transazioni vengono saltate, perché i file corrispondenti sono off-line, SMON esegue il recovery di tali transazioni quando i file tornano on-line.
    • SMON saltuariamente si attiva per eseguire controlli, ma può anche essere attivato da altri processi.
  • 48. PMON Process Monitor
    • Esegue la pulizia di tutte le risorse usate dai processi nel caso essi terminino in maniera anomala.
    • Esegue il Reset sulla tabella delle transazioni attive, e rimuove il Process Id dalla lista dei processi attivi.
    • Rilascia tutte le risorse bloccate dall'utente, e tutti i suoi locks.
    • Si attiva periodicamente.
  • 49. ARCn Archiver
    • Si occupa di eseguire copia dei RLF prima che vengano sovrascritti.
    • Se ne possono avere fino a 10, da ARC0 fino ad ARC9.
    • È il LGWR che lancia nuovi ARCn se il loro numero è insufficiente a gestire il carico di lavoro.
  • 50. RECO Recoverer
    • Viene usato per gestire le transazioni distribuite.
    • Il suo scopo è quindi gestire le transazioni "in-doubt", cioè quelle che coinvolgono più Db in contemporanea e che falliscono (problemi di rete o crash di server) prima di salvare le modifiche.
  • 51. Altri processi
    • LCKn (Lock) Sono usati in configurazione RAC, quando più istanze montano lo stesso Db.
    • QMNn (Queue Monitor) Esegue monitoraggio delle code messaggi.I messaggi vengono salvati in code, e permettono ai server di processarli in "differita".
    • Dnnn (Dispatcher) Si hanno in configurazione Shared Server, per gestire più utenti usando un numero limitato di processi server.
    • Snnn (Shared Server) Hanno stesse identiche funzionalita' dei processi server dedicati.
  • 52. Tipi di processi
    • Processo Utente
      • Programma applicativo (o Tool Oracle come sql*plus), che genera, quando viene lanciato, un processo utente. Tale processo può girare sul Server o su un qualunque Client.
    • Processo Server
      • Prende le richieste dal processo Client, ed interagisce con l'istanza per soddisfare la richiesta. Esso pertanto si occupa di:
        • Eseguire il parsing e l'esecuzione dei comandi SQL.
        • Accedere ai DF e portare i blocchi dati richiesti nella Buffer Cache
        • Restituire i dati al processo utente che ne ha fatto richiesta
  • 53. File Fisici
    • I file fisici possono essere divisi in tre categorie principali:
      • DF: DATA FILES
        • Fisicamente contengono i dati del DB. Sono organizzati logicamente in Tablespaces.
      • RLF: REDO LOG FILES
        • Gli RLF sono invece “la parte fisica” della Redo Log Buffer Cache, e memorizzano quindi tutti i comandi di modifica lanciati sul Db. Lo scopo è quello di limitare od eliminare del tutto la perdita di dati in caso di crash o failure del sistema.
      • CF: CONTROL FILES
        • Contiene informazioni sul Db come il nome, su tutti i file che lo costituiscono, sulla loro dimensione e posizione, e su alcuni eventi particolari del Db stesso.
  • 54. Schema
    • La figura mostra la relazione tra blocchi, extent, segment, datafile, tablespace e database:
  • 55. Tablespace
    • Sono dei contenitori logici, riconosciuti solo da Oracle e non dal sistema operativo, fisicamente formati da uno o più DF.
    • Ogni Db Oracle ha almeno un tablespace: SYSTEM , il quale fisicamente è costituito da uno o più DF.
    • Quando un utente di crea degli oggetti deve specificare su quale tablespace devono essere memorizzati. L’oggetto sarà memorizzato in uno dei file che costituiscono quel tablespace. Se lo spazio all’interno del tablespace finisce, si può aggiungere un altro file al tablespace, oppure si può aumentare la dimensione di uno dei file esistenti.
    • Il vantaggio è che per l’utente queste modifiche sono trasparenti: l’utente sa solamente che i suoi dati sono memorizzati in un dato tablespace, e non su quale file specifico risiedono.
  • 56. La creazione del Database
    • Costruzione del PFILE (parameter file).
      • Il file contiene una serie di parametri necessari per attivare l’istanza (SGA + processi).
      • Dopo aver avviato l’istanza, si crea il database mediante il comando “CREATE DATABASE”.
      • Infine si configura e personalizza il sistema.
  • 57. PFile
    • Contiene al suo interno una serie di parametri necessari per attivare e configurare l’istanza.
    • È l’istanza che permette di accedere ad un database e lavorare con esso.
    • I parametri di inizializzazione sono generalmente distinti in espliciti ed impliciti:
      • espliciti sono quelli presenti nel parameter file.
      • Impliciti sono quelli non esplicitamente valorizzati, che assumeranno un valore di default.
  • 58. PFile
    • Parametri principali:
      • CONTROL_FILES indica la path completa dei CF utilizzati dal database. Il control file è unico, ma si possono avere dei mirror.
      • Esempio: control_files=("c:oracleoradataORCLcontrol01.ctl“)
      • DB_BLOCK_SIZE indica la dimensione del blocco Oracle. Non può più essere modificato dopo la creazione del database. Default a 4 Kb, compreso tra 2 Kb e 32 Kb.
  • 59. PFile
    • DB_NAME indica il nome del Db, che può essere lungo fino ad 8 caratteri, di cui il primo deve essere alfabetico, e può contenere solamente i caratteri speciali : #, _ , e $.
    • Il nome del database potrebbe essere cambiato dopo la sua creazione, ma è si deve ricreare il CF.
    • LOG_BUFFER indica la dimensione in Bytes della Redo log Buffer Cache. Il parametro non è dinamico.
    • SHARED_POOL_SIZE indica la dimensione, in bytes, della Shared Pool. Il default è 16 Mb, ed il parametro è dinamico.
  • 60. PFile
    • LARGE_POOL_SIZE indica la dimensione, in bytes, della Large Pool. Il default è 0, ed il parametro è dinamico.
    • JAVA_POOL_SIZE indica la dimensione, in bytes, della Java Pool. Il default è 20.000 Kb. Se non si usa Java si può impostare 0.
    • SGA_MAX_SIZE indica la dimensione massima che può avere la SGA.
      • Imposta il limite massimo che Oracle può usare per evitare lo swap.
      • Si consiglia di impostare un valore inferiore, rispetto alla ram fisicamente installata sul server, di almeno 300 Mb, a seconda del sistema operativo e delle applicazioni installate.
  • 61. PFile
    • PROCESSES indica il numero massimo di processi, inclusi quelli in background, che possono connettersi all’istanza.
    • BACKGROUND_DUMP_DEST indica la directory di Dump dei processi in caso di crash. Nella directory viene anche salvato il file Alert.log.
    • CORE_DUMP_DEST indica la directory di Dump del Core. Tale parametro non viene usato in Windows.
    • USER_DUMP_DEST indica directory di Dump dei processi degli utenti.
    • REMOTE_LOGIN_PASSWORDFILE indica il metodo di autenticazione.
  • 62. PFile
    • COMPATIBLE indica la release di compatibilità.
      • Utile in caso di migrazione da un vecchio database, e si vogliono disattivare per problemi di compatibilità alcune funzionalità.
    • UNDO_MANAGEMENT indica se la gestione dei Segmenti di Rollback deve essere effettuata in modalità automatica.
    • SORT_AREA_SIZE indica la dimensione dell’area di memoria da utilizzare per gli ordinamenti temporanei (Temporary sorts). In generale più è grande questo valore e più veloci sono le operazioni di sort o join.
  • 63. Variabili d’ambiente
    • Oltre ai parametri indicati nel PFILE si devono considerare le variabili d’ambiente del sistema operativo, soprattutto in ambito Unix. Tali variabili permettono di individuare correttamente il software oracle necessario al corretto funzionamento.
    • Variabili principali:
      • ORACLE_BASE La directory alla base dell’installazione. Tutte le versioni di Oracle presenti su una macchina devono essere installate sotto questa directory.
      • ORACLE_HOME indica la directory contenente il software, ed è relativa alla oracle_base.
      • ORACLE_SID indica il nome dell’istanza.
      • PATH indica la directory contente gli eseguibili, in genere $ORACLE_HOME/bin
  • 64. Creazione del DB
    • Creazione del file di autenticazione per utenze amministrative.
    • Utilizzo di sql*plus e connessione come utente SYS.
    • Attivazione dell’istanza (startup)
    • Create database
  • 65. Data Dictionary
    • È l’insieme delle tabelle e viste contenenti informazioni sui metadata del Db, come gli utenti, le tabelle, i privilegi, ecc…
    • Le informazioni in esso contenute sono vitali per il corretto funzionamento del database.
    • Tuttavia le tabelle contengono informazioni codificate e di non semplice lettura, mentre le viste decodificano tali informazioni rendendole disponibili agli utenti abilitati.
    • Dopo la creazione del database è importante creare le viste, al fine di poter interrogare il sistema chiedendo ad esempio quanti e quali sono i tablespaces.
    • Le viste vengono create dagli script lanciati dopo creazione del Db, che si trovano in $ORACLE_HOME/rdbms/admin
  • 66. Viste di sistema
    • Le viste sono query memorizzate nel database. Gli script permettono di creare le cosiddette “viste di sistema”, molto utili per ricavare informazioni sul database, in quanto le tabelle interne, comunque accessibili dai SYSDBA, memorizzano i dati in un formato spesso numerico e di difficile interpretazione.
    • Le viste di sistema sono classificate in base al prefisso:
      • USER_ Contengono informazioni sugli oggetti di proprietà dell’utente che lancia la query sulla vista.
      • ALL_Contengono informazioni sugli oggetti sui quali l’utente che lancia la query ha accesso o privilegi.
      • DBA_ Contengono informazioni sugli oggetti di tutti gli utenti. Solo gli utenti privilegiati (aventi il ruolo SELECT_CATALOG_ROLE come SYSTEM o SYS) possono eseguire delle query sulle viste DBA_. Alcune di esse contengono informazioni sulle strutture del DB, come l’elenco dei DF.
  • 67. Viste di sistema
    • V$ Dynamic Performance Views, in quanto il loro contenuto è strettamente legato alle performance e perché i dati su cui si appoggiano vengono aggiornati continuamente.
    • GV$ Perr la quasi totalità delle V$, Oracle ha un corrispondente GV$. Sono Dynamic Performance Views Globali. La GV$ corrispondente ha una colonna in più, INST_ID, che identifica il numero dell’istanza.
    • Osservazione: le viste USER_ ed ALL_ hanno le stesse informazioni, differiscono per la presenza o meno della colonna OWNER, mentre le viste DBA_ hanno in genere qualche informazione in più.
  • 68. Viste
    • Esempi di vista con informazioni sulle tabelle:
      • USER_TABLES
      • USER_TAB_COLUMNS
      • ALL_TABLES
      • ALL_TAB_COLUMNS
      • DBA_TABLES
      • DBA_TAB_COLUMNS
  • 69. Esempi di viste
    • Per ottenere un elenco di tutte le viste del Data Dictionary, si possono lanciare le query:
      • SQL> select * from DICTIONARY;
      • Se si vogliono informazioni sul contenuto delle singole colonne lanciare la query: SQL> select * from DICT_COLUMNS;
      • È meglio far precedere, per visualizzare meglio l’output a video, da: SQL> set linesize 1500 SQL> COL TABLE_NAME FORMAT A25 SQL> COL COMMENTS FORMAT A40
  • 70. Utenti
    • Durante la creazione del database vengono creati di default due utenti:
      • SYS (default password: CHANGE_ON_INSTALL)
      • SYSTEM (default password: MANAGER)
    • SYS è il proprietario di tutte le tabelle di sistema.
    • SYSTEM è un amministratore meno “potente” di SYS, ma sufficiente per svolgere la maggior parte dei compiti tipici dell’amministratore del database.
  • 71. Ruoli
    • Due ruoli di default: SYSOPER e SYSDBA.
    • SYSOPER
      • STARTUP e SHUTDOWN
      • ALTER DATABASE [ OPEN / MOUNT ]
      • ALTER DATABASE BACKUP
      • ALTER DATABASE ARCHIVELOG
      • RECOVER DATABASE
      • CREATE SPFILE
      • RESTRICTED SESSION
    • SYSDBA
      • Tutti i privilegi inclusi in SYSOPER con ADMIN OPTION
      • CREATE DATABASE
      • ALTER DATABASE [ BEGIN / END ] BACKUP
      • RECOVER DATABASE UNTIL (Time-based Recovery)
  • 72. SPFile
    • L’SPFILE non è altro che un file avente lo stesso contenuto del PFILE (in formato binario e quindi non più editabile direttamente), ma aggiornato direttamente dal database.
    • I parametri di inizializzazione possono essere statici o dinamici:
      • Quelli statici sono così definiti perché, affinché la modifica abbia effetto, è necessario riavviare il database.
      • Quelli dinamici possono essere modificati senza essere costretti a riavviare il database.
    • Per modificare il valore di un parametro, si utilizza il comando: ALTER SYSTEM SET nome_parametro=nuovo_valore;
    • Se ho un database avviato con PFILE e modifico un parametro dinamicamente con ALTER SYSTEM, devo ricordarmi di modificare il valore corrispondente nel PFILE, altrimenti al successivo riavvio del database, il sistema leggerà il PFILE, impostando il parametro al valore in esso indicato.
  • 73. SPFile
    • Si può creare (con privilegi SYSOPER o SYSDBA) utilizzando il comando: SQL> CREATE SPFILE='C:ora_cledatabaseSPFILEORCL.ORA’ FROM PFILE='C:oracleadminORCLpfileinit.ora';
      • A questo punto, tutte le modifiche apportate con il comando: ALTER SYSTEM SET nome_parametro=nuovo_valore; verranno salvate in automatico nell’SPFILE, e non andranno perdute in caso di riavvio del database.
  • 74. SPFile
    • Il comando ha una clausola SCOPE che può assumere tre valori:
      • SPFILE: le modifiche apportate da ALTER SYSTEM verranno salvate solo nell'SPFILE. Affinché diventino attive occorre eseguire uno shutdown e startup. Questo è l'unico mezzo per modificare i parametri statici.
      • MEMORY: le modifiche all'istanza verranno subito attivate, ma non verranno salvate sul file. Pertanto dopo lo startup e shutdown queste modifiche verranno perse. Non si può usare questa clausola con i parametri statici.
      • BOTH: è il valore di default della clausola SCOPE si sta utilizzando un SPFILE, le modifiche apportate da ALTER SYSTEM verranno subito applicate all'instanza e saranno anche salvate nello SPFILE. Non si può usare questa clausola con i parametri statici.
  • 75. Control File
    • Il Control File (CF) è il file di controllo dell’intero database.
    • Il CF è unico, ma è possibile avere dei mirror, fino a un massimo di 8.
    • Se si danneggiano tutti i CF, il database non sarà più funzionante, ed occorrerà ricrearlo.
  • 76. Control File
    • Nome DB
    • Timestamp di creazione del DB
    • DF: nome, path, stato (online/offline)
    • RLF: nome, path
    • Informazioni sullo stato archive
    • Nome tablespaces
    • LSN (Log Sequence number) corrente
    • Info sul Checkpoint più recente
    • Inizio e fine degli Undo segments
    • Informazioni di BackUp di RMAN
    • La dimensione del CF è legata al valore dei seguenti parametri:
      • MAXLOGFILES
      • MAXLOGMEMBERS
      • MAXLOGHISTORY
      • MAXDATAFILES
      • MAXINSTANCES
  • 77. Tablespace
    • Il Tablespace è un contenitore logico, visibile solo da Oracle, costituito fisicamente da uno o più files chiamati DATA-FILES (DF).
    • Il Sistema Operativo vede solamente i Data Files, mentre Oracle gestisce sia i data files che il loro raggruppamento logico.
  • 78. Tablespace
    • Il Tablespace può essere visto come un sottoinsieme dell'intero database.
    • Il database più piccolo può essere costituito da un solo tablespace, SYSTEM, che è l'unico sempre presente in qualunque database Oracle in quanto è il contenitore fisico del Data Dictionary (DD), che contiene di tutti gli oggetti del database necessari al funzionamento del DB:
      • contiene la tabella degli utenti, con tutte le informazioni relative quali login e password,
      • contiene la tabella con l'elenco di tutti i files del database
      • la tabella con l'elenco di tutti gli oggetti del database
      • la tabella con tutti i privilegi assegnati agli utenti
  • 79. Tablespace
    • Generalmente un database Oracle è costituito anche da altri tablespaces che permettono di suddividere fisicamente gli oggetti in esso memorizzati,ad esempio:
      • un tablespace che contiene gli oggetti degli utenti (USERS)
      • un tablespace che contiene gli indici (INDX)
      • un tablespace che contiene gli oggetti temporanei (TEMP)
      • un tablespace che contiene RollBack Segments (UNDO)
  • 80. Tablespace
    • A livello funzionale, la presenza di più tablespace è importante:
      • Permette di suddividere il DB in più unità, ognuna della quale contiene solo elementi tra loro correlati.
      • Poiché ogni tablespace fisicamente è costituita da almeno un DF, c’è la possibilità di appoggiarsi fisicamente a files diversi, che si possono memorizzare su dischi differenti al fine di migliorare le prestazioni complessive del database.
      • Per ogni utente si può stabilire su quale tablespace potrà creare oggetti, e quanto spazio massimo utilizzare, permettendo un controllo globale preciso delle quote.
      • Tali impostazioni sono trasparenti per gli utenti.
  • 81. Vantaggi
    • Vantaggi di avere più tablespace :
      • Separazione del DD dagli altri dati, e quindi riduzione delle contese di accesso a disco (se i DF che costituiscono i vari tablespaces sono su dischi diversi).
      • Gestione delle quote per singolo utente.
      • Gestione più efficiente degli oggetti temporanei (ad esempio per le operazioni di Sort) che vengono trattati solo su uno specifico tablespace, in genere TEMP.
      • Gestione più efficiente dei Segmenti di Roll Back (tablespace UNDO), che sono i dati necessari a permettere l'utilizzo del comando "RollBack"
      • Gestione più efficiente delle applicazioni che usano lo stesso database: se infatti raggruppo le applicazioni usando un tablespace diverso per ognuna, in caso di manutenzione, una parte delle applicazioni potrebbero non funzionare (quelle che si appoggiano ai tablespaces in manutenzione o recovery) mentre le altre non risentono del disservizio.
      • Si possono gestire le operazioni di Back Up e Recovery per singolo tablespace.
  • 82. Tablespace e DF
    • Al momento della creazione di un tablespace viene fisicamente allocato sul filesytem un DF, avente la dimensione specificata.
    • Il DF sarà inizialmente vuoto, ma verrà strutturato in modo da ospitare i futuri oggetti che verranno creati in esso.
    • Oracle ha due modalità per gestire lo spazio interno:
      • Memorizzando le informazioni nel DD.
      • All'interno del tablespace.
  • 83. Tablespace
    • In funzione della modalità scelta si suddividono i tablespaces in:
      • DICTIONARY-MANAGED: Le informazioni necessarie per la gestione dello spazio sono memorizzate nel DD.
        • Implica che ad ogni modifica dello stato di un blocco viene eseguito un update su una specifica tabella del DD.
        • Ad ogni modifica dello stato di un blocco avviene la creazione di una informazione di UNDO, necessaria per un eventuale Rollback.
      • LOCALLY-MANAGED: Le informazioni necessarie per la gestione dello spazio sono memorizzate nel tablespace, in genere nell'header di ogni singolo DF.
        • Se un blocco cambia il suo stato, la modifica non genera informazioni di UNDO, in quanto non viene eseguito nessun update su tabelle del DD.
        • Questo tipo di tablespace permette di avere prestazioni superiori.
  • 84. Temp Tablespace
    • Serve per permettere ad Oracle di memorizzare dati od oggetti temporaneamente, facendo una sorta di SWAP ogni qual volta la Ram a disposizione non è sufficiente.
    • L'utilizzo più frequente avviene durante le operazioni di ordinamento (SORT).
    • All'interno del tablespace viene creato un Segment particolare, chiamato SORT SEGMENT:
      • Condiviso da tutti gli utenti del DB
      • Costituito da un certo numero di extents (ogni transazione userà un extent in maniera esclusiva).
      • Allocato nel momento della prima operazione di sort.
      • Non è possibile creare esplicitamente oggetti al suo interno.
  • 85. Undo Tablespace
    • Questo tipo di tablespace viene utilizzato internamente per consentire l'operazione di ROLLBACK.
    • Oracle memorizza temporaneamente nel tablespace i dati che vengono modificati, permettendo di annullare le transazioni terminate erroneamente od esplicitamente dagli utenti.
  • 86. Alter Tablespace
    • Dopo aver creato un tablespace, si possono modificarne alcune caratteristiche utilizzando il comando ALTER TABLESPACE, tra cui:
      • aggiungere nuovi DF o TF (Temporary files).
      • rinominare i files.
      • modificare i parametri di storage dei tablespace dictionary-managed.
      • modificare l'allocazione degli extents.
      • modificare disponibilità del tablespace (ONLINE - OFFLINE).
      • passare da READ-ONLY a READ-WRITE e viceversa.
      • passare da PERMANENT a TEMPORARY e viceversa.
  • 87. Parte 3 SQL
  • 88. SQL
    • Structured Query Language
    • Operazioni fondamentali:
      • SELECT
      • INSERT
      • UPDATE
      • DELETE
  • 89. Sintassi
    • Query case insensitive:
      • SeLeCt argoMENTO, sezione, PAGINA FROM gioRNAle;
      • select Argomento, Sezione, Pagina from GIORNALE;
    • Case sensitive solo nelle verifiche:
      • Sezione = ‘f’
      • Sezione = ‘F’
      • Le due clausole precedenti sono differenti.
  • 90. Tabelle
    • Creazione di una tabella di esempio:
      • create table GIORNALE ( Argomento VARCHAR2(15) not null, Sezione CHAR(1), Pagina NUMBER );
    • “ Not null” impedisce l’inserimento della riga se il campo è vuoto
  • 91. Tabella GIORNALE
    • Argomento Sezione Pagina
    • ----------------------------------------------------------
    • Notizie A 1
    • Sport D 1
    • Editoriali A 12
    • Economia E 1
    • Meteo C 2
    • Televisione B 7
    • Nascite F 7
    • Annunci F 8
    • Salute F 6
    • Vita moderna B 1
    • Fumetti C 4
    • Film B 4
    • Bridge B 2
    • Necrologi F 6
  • 92. Query
    • select Argomento, Sezione, Pagina from GIORNALE;
    • ARGOMENTO S PAGINA
    • ------------------- - -----------
    • Notizie A 1
    • Sport D 1
    • Editoriali A 12
    • Economia E 1
    • Meteo C 2
    • Televisione B 7
    • Nascite F 7
    • Annunci F 8
    • […]
  • 93. Risultati
    • I nomi di colonna sono visualizzati in maiuscolo
    • La query è effettivamente case-insensitive
    • L’ampiezza delle colonne è prefissata da Oracle (“Sezione” viene abbreviata)
    • Per avere informazioni usiamo il comando DESCRIBE
  • 94. DESCRIBE
    • describe GIORNALE
    • Name Null? Type
    • ------------------------------- -------- -------
    • ARGOMENTO NOT NULL VARCHAR2(15)
    • SEZIONE CHAR(1)
    • PAGINA NUMBER
  • 95. SELECT
    • Comando per selezionare informazioni dalle tabelle
    • 4 parole chiave principali:
      • SELECT
      • FROM
      • WHERE
      • ORDER BY
  • 96. ORDER BY
    • Esempio:
      • select Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘F’ order by Argomento;
    • ARGOMENTO S PAGINA
    • --------------- - ------
    • Annunci F 8
    • Nascite F 7
    • Necrologi F 6
    • Salute F 6
  • 97. ORDER BY
    • Esempio su più campi:
      • select Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘F’ order by Pagina, Argomento;
    • ARGOMENTO S PAGINA
    • --------------- - ------
    • Necrologi F 6
    • Salute F 6
    • Nascite F 7
    • Annunci F 8
  • 98. DESC
    • Ordinamento decrescente:
      • select Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘F’ order by Pagina desc ;
    • ARGOMENTO S PAGINA
    • --------------- - ------
    • Annunci F 8
    • Nascite F 7
    • Necrologi F 6
    • Salute F 6
  • 99. WHERE
    • Parola chiave per verificare un singolo valore.
    • Uso degli operatori logici:
      • Uguaglianza “ = “
      • Maggiore “ > ”
      • Maggiore o uguale “ >= “
      • Minore “ < “
      • Minore o uguale “ <= “
      • Diverso “ != “ “ <> ”
  • 100. LIKE
    • Operatore logico per verificare similitudini.
    • % : carattere jolly
    • _ : marcatore di posizione
    • Sintassi di esempio:
      • Argomento LIKE ‘CIA % ’
        • “ Argomento” inizia con le lettere CIA
      • Argomento LIKE ‘ % IAO’
        • “ Argomento” finisce con le lettere IAO
      • Argomento LIKE ‘ __ A % ’
        • “ Argomento” ha una “A” in terza posizione
      • Argomento LIKE ‘ % 0 % 0 % ’
        • “ Argomento” contiene due “0”
  • 101. NULL
    • Operatore logico per verificare se una riga è vuota (priva di dati).
    • Sintassi di esempio:
      • Argomento IS NULL
      • Argomento IS NOT NULL
  • 102. Query
    • select Argomento, Sezione, Pagina from GIORNALE where Pagina > 4;
    • ARGOMENTO S PAGINA
    • --------------- - ------
    • Editoriali A 12
    • Televisione B 7
    • Nascite F 7
    • Annunci F 8
    • Necrologi F 6
    • Salute F 6
  • 103. Query
    • select Argomento, Sezione, Pagina from GIORNALE where Argomento LIKE ‘N % ’;
    • ARGOMENTO S PAGINA
    • --------------- - ------
    • N ascite F 7
    • N ecrologi F 6
    • select Argomento, Sezione, Pagina from GIORNALE where Argomento LIKE ‘__i % ’;
    • ARGOMENTO S PAGINA
    • --------------- - ------
    • Ed i toriali A 12
    • Br i dge B 2
  • 104. Verifica di valori
    • Operatori logici per verificare più valori:
      • Pagina IN (1,2,3)
        • Pagina è nell’elenco (1,2,3).
      • Pagina NOT IN (1,2,3)
        • Pagina non è nell’elenco (1,2,3).
      • Sezione BETWEEN ‘B’ AND ‘D’
        • Sezione è uguale a un carattere compreso tra ‘B’ e ‘D’.
      • Pagina NOT BETWEEN 6 AND 10
        • Pagina è strettamente minore di 6 o maggiore di 10.
  • 105. Logica della combinazione
    • Gli operatori logici AND e OR si usano per combinare le espressioni logiche:
      • AND : visualizza le righe che soddisfano entrambe le condizioni logiche
      • OR : visualizza le righe che soddisfano almeno una delle due condizioni logiche.
  • 106. Query
    • select Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘F’ OR Pagina > 7;
    • ARGOMENTO S PAGINA
    • --------------- - -------
    • Editoriali A 12
    • Nascite F 7
    • Annunci F 8
    • Necrologi F 6
    • Salute F 6
  • 107. Precedenza operazioni
    • Stabilire le priorità di combinazione usando le parentesi:
      • select Argomento, Sezione, Pagina from GIORNALE where Pagina > 2 and ( Sezione = ‘A’ or Sezione = ‘B’ ) ;
    • AND ha precedenza su OR, in assenza di parentesi.
  • 108. Subquery
    • Può essere utile inserire delle query in altre query.
    • La subquery va racchiusa tra parentesi
    • Se la subquery ha come risultato valori multipli (più righe), si possono usare solo operatori per valori multipli
  • 109. Subquery select ARGOMENTO from GIORNALE where Sezione = ‘F’; select Sezione from GIORNALE where Argomento = ‘Salute’; ARGOMENTO --------------- Nascite Annunci Necrologi Salute S - F
  • 110. Subquery
    • select ARGOMENTO from GIORNALE where Sezione = (select Sezione from GIORNALE where Argomento = ‘Salute’ ) ;
    • ARGOMENTO
    • ---------------
    • Nascite
    • Annunci
    • Necrologi
    • Salute
  • 111. Combinazione di tabelle
    • E’ possibile combinare più tabelle se hanno un dato in comune.
    • Esempio:
      • tabella CLIMA: condizioni meteo attuali per città
        • select Citta, Condizione, Temperatura from CLIMA;
      • tabella DISLOCAZIONE: coordinate geografiche per città
        • select Citta, Longitudine, EstOvest, Latitudine, NordSud from LOCAZIONE;
  • 112. Tabelle di esempio CITTA LONGITUDINE E LATITUDINE N ------------------------- ----------- - ---------- - ATENE 23.43 E 37.58 N CHICAGO 87.38 O 41.53 N CONAKRY 13.43 O 9.31 N LIMA 77.03 O 12.03 S MADRAS 80.17 E 13.05 N MANCHESTER 2.15 O 53.3 N MOSCA 37.35 E 55.45 N PARIGI 2.2 E 48.52 N SHENYANG 123.3 E 41.48 N ROMA 12.29 E 41.54 N TOKYO 139.5 E 35.42 N SYDNEY 151.1 E 33.52 S SPARTA 22.27 E 37.05 N MADRID 3.14 O 40.24 N CITTA CONDIZIONE TEMPERATURA ----------- ----------- ----------- LIMA PIOGGIA 7 PARIGI NUVOLOSO 27 MANCHESTER NEBBIA 19 ATENE SOLE 36 CHICAGO PIOGGIA 19 SYDNEY NEVE -2 SPARTA NUVOLOSO 23
  • 113. Unione dei risultati
    • Le tabelle dell’esempio possono essere unite
    • Bisogna indicare nella query il dato in comune
    • Esempio:
      • select CLIMA.Citta , Condizione, Temperatura, Latitudine, NordSud, Longitudine, EastOvest from CLIMA, LOCAZIONE where CLIMA.Citta = LOCAZIONE.Citta ;
  • 114. Risultati
    • CITTA CONDIZIONE TEMPERATURA LATITUDINE N LONGITUDINE E
    • ----------- ----------- ----------- ---------- - ----------- -
    • ATENE SOLE 36 37.58 N 23.43 E
    • CHICAGO PIOGGIA 19 41.53 N 87.38 O
    • LIMA PIOGGIA 7 12.03 S 77.03 O
    • MANCHESTER NEBBIA 19 53.3 N 2.15 O
    • PARIGI NUVOLOSO 27 48.52 N 2.2 E
    • SPARTA NUVOLOSO 23 37.05 N 22.27 E
    • SYDNEY NEVE -2 33.52 S 151.1 E
  • 115. Viste
    • Il risultato della combinazione di più tabelle può ricevere un nome ed essere utilizzato come una tabella (vista).
    • Esempio:
      • create view INVASIONE AS select CLIMA.Citta, Condizione, Temperatura, Latitudine, NordSud, Longitudine, EstOvest
      • from CLIMA, DISLOCAZIONE
      • where CLIMA.Citta = DISLOCAZIONE.Citta;
  • 116. Tipi di dati
    • Servono per tipizzare i dati
    • Oracle usa diversi tipi di dati:
      • NUMBER
      • CHAR
      • DATE
      • VARCHAR2
      • LONG
      • RAW
      • LONG RAW
      • BLOB
      • CLOB
      • BFILE
  • 117. Stringhe
    • CHAR:
      • Lunghezza prefissata
      • Vengono inseriti spazi vuoti per raggiungere la dimensione
    • VARCHAR2:
      • Lunghezza variabile
  • 118. Funzioni per stringhe
    • Sintassi:
      • FUNZIONE(stringa [,opzione] )
    • Funzioni principali:
      • Concat, ||
      • Lenght
      • Lower, Upper
      • LPad, RPad
      • Trim, LTrim, RTrim
      • Substr, Instr
  • 119. Esempio: LOWER
    • select Citta, LOWER(Citta), LOWER('Citta') from CLIMA;
    • CITTA LOWER(CITTA) LOWER('CITTA')
    • ----------- ----------- -------------
    • LIMA lima citta
    • PARIGI parigi citta
    • MANCHESTER manchester citta
    • ATENE atene citta
    • CHICAGO chicago citta
    • SYDNEY sydney citta
    • SPARTA sparta citta
  • 120. Esempio: concatenazione
    • select Citta||Paese from DISLOCAZIONE;
    • CITTA || PAESE
    • --------------------------------------------------
    • ATENEGRECIA
    • CHICAGOSTATI UNITI
    • CONAKRYGUINEA
    • LIMAPERU
    • MADRASINDIA
    • MANCHESTERINGHILTERRA
    • MOSCARUSSIA
    • PARIGIFRANCIA
    • SHENYANGCINA
    • ROMAITALIA
    • TOKYOGIAPPONE
    • SYDNEYAUSTRALIA
    • SPARTAGRECIA
    • MADRIDSPAGNA
  • 121. Esempio: RPAD
    • RPAD
      • RPAD(stringa,lunghezza [,'car'])
        • Riempie con il carattere ‘ car ’ fino a che la stringa ha lunghezza ‘ lunghezza ’, partendo da destra
        • select RPAD(Citta,35,'.'), Temperatura from CLIMA;
          • RPAD(CITTA,35,'.') TEMPERATURA
          • ----------------------------------- -----------
          • LIMA................................ 7
          • PARIGI............................. 27
          • MANCHESTER................ 19
  • 122. Esempio: LTrim
    • LTrim
      • LTrim(stringa [.'car'])
        • Elimina le occorrenze del carattere ‘ car ’
        • select RTRIM(Titolo,'.“') From RIVISTA
          • TITOLO: THE BARBERS WHO SHAVE THEMSELVES .&quot; HUNTING THOREAU IN NEW HAMPSHIRE“
          • RTRIM(TITOLO,'.“'): THE BARBERS WHO SHAVE THEMSELVES &quot; HUNTING THOREAU IN NEW HAMPSHIRE
  • 123. Lenght e Substr
    • Lenght: restituisce lunghezza di una stringa
      • Non funziona sui dati di tipo LONG
    • Substr: restituisce una sottostringa
      • SUBSTR(stringa,inizio [,conta] )
  • 124. Funzioni numeriche
    • Funzioni a valore singolo
      • Operazioni fondamentali
        • + - * /
      • Cos, Sin, Exp, Abs, Trunc (val, precis), Round Trunc (val, precis)
    • Funzioni di gruppo
      • Max, Min (su gruppi di righe)
      • Avg, Count
  • 125. Gestione delle date
    • Formato DATE
      • Gg mm aa hh mm ss
      • Le colonne di tipo DATE sono gestite con l’aritmetica delle date da SQL
      • SYSDATE restituisce la data del sistema su cui è installato Oracle
        • select SysDate from DUAL;
      • CURRENT_DATE restituisce l’ora di sessione, con fuso orario
        • select Current_Date from DUAL;
        • 15-MAR-02
      • SYSTIMESTAMP restituisce la data di sistema in timestamp
        • select SysTimeStamp from DUAL;
        • 15-MAR-02 02.41.31.000000 PM -05:00
  • 126. Funzioni per le date
    • ADDMONTHS: Aggiungere mesi
      • select ADD_MONTHS(Celebrata,6) GiornoFesta from FESTA
    • LEAST: Data che viene per prima in un elenco
      • select Festa, LEAST(Dataeff,Celebrata) Primo, Dataeff,Celebrata
    • GREATEST: Data più recente in un elenco
    • FESTA PRIMO DATAEFF CELEBRATA
    • ------------------------- --------- --------- ---------
    • MARTIN LUTHER KING, JR. 15-JAN-02 15-JAN-02 17-JAN-02
    • LINCOLNS BIRTHDAY 12-FEB-02 12-FEB-02 18-FEB-02
    • WASHINGTONS BIRTHDAY 18-FEB-02 22-FEB-02 18-FEB-02
    • MEMORIAL DAY 27-MAY-02 30-MAY-02 27-MAY-02
    • COLUMBUS DAY 12-OCT-02 12-OCT-02 14-OCT-02
  • 127. Conversione in data
    • Le funzioni che operano sulle date sono delicate perché hanno bisogno di operare su valori in formato DATE
    • select LEAST('20-JAN-02','20-DEC-02') from DUAL;
      • Restituisce risultato errato, perché considera le stringhe come letterali
    • select LEAST( TO_DATE ('20-JAN-02'), TO_DATE ('20-DEC-02') ) from DUAL;
      • Restituisce il risultato corretto, utilizzando la funzione di conversione TO_DATE
  • 128. Conversione da data
    • Per convertire una data in una stringa si usa TO_CHAR
      • TO_CHAR(data[,'formato'[,'NLSparametri']])
      • Formato predefinito delle date: DD-MON-YY
    • Usando vari parametri si possono ottenere le formattazioni desiderate:
      • select DataNascita, TO_CHAR(DataNascita,'Month, ddth, YyyY') Formattato from COMPLEANNO;
    • DATANASCITA FORMATTATO
    • ----------- ------------------------------
    • 12-MAY-46 May , 12th, 1946
    • 23-AUG-37 August , 23rd, 1937
    • 02-FEB-47 February , 02nd, 1947
    • 20-MAY-49 May , 20th, 1949
    • 11-NOV-42 November , 11th, 1942
  • 129. Funzioni di conversione
    • Oracle mette a disposizione molte funzioni di conversione tra diversi tipi di dato
      • TO_CHAR: converte DATE o NUMBER
      • TO_DATE: converte NUMBER, CHAR, VARCHAR2
      • TO_NUMBER: converte CHAR, VARCHAR2
    • Esistono delle conversioni automatiche a livello di codice
      • Intervengono soprattutto nei parametri passati alle funzioni
  • 130. Raggruppamento di righe
    • HAVING e GROUP BY
      • Sono clausole che funzionano su gruppi di righe e non su singole righe
      • Sono parallele a WHERE e ORDER BY
  • 131. Esempio Group By
    • select NomeCategoria, COUNT(*) from BIBLIOTECA group by NomeCategoria;
    • NOMECATEGORIA COUNT(*)
    • -------------------- ----------
    • NARRAADULTI 6
    • SAGGIAADULTI 10
    • CONSADULTI 6
    • NARRRAGAZZI 5
    • SAGGIRAGAZZI 1
    • ILLUSRAGAZZI 3
  • 132. Esempio Having
    • select NomeCategoria, COUNT(*) from BIBLIOTECA group by NomeCategoria having COUNT(*) 5;
    • NOMECATEGORIA COUNT(*)
    • -------------------- ----------
    • NARRADULTI 6
    • SAGGIADULTI 10
    • CONSADULTI 6
  • 133. Funzioni combinate su gruppi
    • select NomeCategoria, COUNT(*), AVG(Valutazione) from BIBLIOTECA where Valutazione > 1 group by Nomecategoria having Nomecategoria like ‘A%’ order by COUNT(*) desc;
    • NOMECATEGORIA COUNT(*) AVG(VALUTAZIONE)
    • -------------------- ---------- ----------------
    • SAGGIADULTI 10 4.2
    • NARRADULTI 6 3.66666667
    • CONSADULTI 6 3.16666667
  • 134. Outer Join
    • Serve per restituire dei risultati anche se non ci sono corrispondenze in una delle 2 tabelle coinvolte da un join
    • L’outer join può essere left, right, o full
  • 135. Esempio: join
    • Join: elenco libri ed elenco prestiti in una biblioteca
      • select distinct B.Titolo from BIBLIOTECA_PRESTITO BC, BIBLIOTECA B where BC.Titolo = B.Titolo;
      • TITOLO
      • ----------------------------------------
      • ANNE OF GREEN GABLES
      • EITHER/OR
      • GOOD DOG, CARL
      • HARRY POTTER AND THE GOBLET OF FIRE
      • INNUMERACY
      • JOHN ADAMS
      • MIDNIGHT MAGIC
  • 136. Esempio: outer join
    • Si vogliono ora visualizzare tutti i titoli, anche quelli non presi in prestito.
    • Si utilizza il segno ‘+’ sul lato del join che deve restituire le righe senza corrispondenze.
    • select B.Titolo, MAX(BC.DataRestituzione - BC.DataPrestito) “MAX GIORNI PRESTITO!“ from BIBLIOTECA_PRESTITO BC, BIBLIOTECA B where BC.Titolo (+) = B.Titolo group by B.Titolo;
  • 137. Esempio: risultato
    • TITOLO Max Giorni Prestito
    • ---------------------------------------- -------------------
    • ANNE OF GREEN GABLES 18
    • BOX SOCIALS
    • CHARLOTTE'S WEB
    • EITHER/OR 8
    • EMMA WHO SAVED MY LIFE
    • GOOD DOG, CARL 14
  • 138. Outer Join
    • Da Oracle 9i si può usare la sintassi ANSI SQL:
      • Left outer join… on
      • Right outer join… on
      • Full outer join … on
    • select B.Titolo, MAX(BC.DataRestituzione - BC.DataPrestito) &quot;Max Giorni Prestito“ from BIBLIOTECA_PRESTITO BC left outer join BIBLIOTECA B on BC.Titolo = B.Titolo group by B.Titolo;
  • 139. Gestione dei dati
    • Funzioni principali
      • INSERT
        • Inserisce dati direttamente in una tabella
        • Inserisce dati indirettamente tramite una vista
      • UPDATE
        • Modifica i dati presenti in una o più righe della tabella
      • DELETE
        • Cancella una o più righe
  • 140. Tabella di esempio
    • Tabella COMFORT: registra dati meteo di alcune città
      • describe COMFORT
      • Nome Null? Type
      • ------------------------------- -------- ----
      • CITTA NOT NULL VARCHAR2(13)
      • DATACAMPIONE NOT NULL DATE
      • MEZZOGIORNO NUMBER(3,1)
      • MEZZANOTTE NUMBER(3,1)
      • PRECIPITAZIONE NUMBER
  • 141. Insert
    • Inserisce una nuova riga
    • Sintassi:
      • insert into COMFORT values (‘WALPOLE', '21-MAR-01'). 13.8, 6.6, 0);
      • Il punto a fine riga della query precedente serve per andare a capo concatenando, è analogo a:
        • values (‘WALPOLE', '21-MAR-01‘,13.8, 6.6, 0);
  • 142. Insert e date
    • Per inserire le date è necessario utilizzare la funzione di conversione TO_DATE e specificare il formato:
      • insert into COMFORT values (‘WALPOLE', TO_DATE ('06/22/2001 1:35',‘MM/DD/YYYY HH24:MI') , 13.8, 6.6, 0);
  • 143. Delete
    • Elimina righe
    • Bisogna indicare quali con la clausola WHERE, altrimenti la tabella viene interamente svuotata:
      • delete from COMFORT where Citta = ‘WALPOLE';
  • 144. Update
    • Aggiorna i dati di una colonna del database, per una o più righe a seconda della clausola WHERE.
      • update COMFORT set Precipitazione = .5, Mezzanotte = 73.1 where Citta = ‘KEENE‘ and DataCampione = '22-DEC-2001';
  • 145. Gestione delle tabelle
    • Si usa il comando CREATE TABLE
    • Bisogna definire le colonne
      • create table STRANO ( Citta VARCHAR2(13) NOT NULL, DataCampione DATE NOT NULL, Mezzogiorno NUMBER(3,1), Mezzanotte NUMBER(3,1), Precipitazione NUMBER );
  • 146. Create table
    • Requisiti:
      • I nomi delle tabelle e delle colonne devono iniziare con una lettera
      • Nomi lunghi da 1 a 30 caratteri
      • Se i nomi non sono inseriti tra virgolette, non si distingue tra maiuscole e minuscole
      • I tipi di dati CHAR e VARCHAR devono specificare la lunghezza
  • 147. Chiavi
    • Candidata
      • E’ una combinazione di una o più colonne, i cui valori identificano univocamente ogni riga di una tabella.
    • Primaria
      • E’ una chiave candidata speciale , può esisterne solo una e una colonna di tale chiave non può essere NULL.
    • Creano degli indici per mantenere l’integrità del database.
  • 148. Esempio: chiave candidata
    • Chiave candidata STRANO_UQ:
      • create table STRANO ( Citta VARCHAR2(13) NOT NULL, DataCampione DATE NOT NULL, Mezzogiorno NUMBER(4,1), Mezzanotte NUMBER(4,1), Precipitazione NUMBER, constraint STRANO_UQ UNIQUE (Citta, DataCampione) );
  • 149. Esempio: chiave primaria
    • Chiave primaria STRANO_PK:
      • create table STRANO ( Citta VARCHAR2(13), DataCampione DATE, Mezzogiorno NUMBER(4,1), Mezzanotte NUMBER(4,1), Precipitazione NUMBER, constraint STRANO_PK PRIMARY KEY (Citta, DataCampione)
      • );
  • 150. Esempio: chiave primaria
    • Si può inserire un vincolo di chiave primaria anche successivamente:
      • alter table STRANO add constraint STRANO_PK PRIMARY KEY ( Citta );
  • 151. Chiave esterna
    • E’ una combinazione di colonne con valori basati su quelli di una chiave primaria esterna.
    • I valori della chiave esterna corrispondono ai valori effettivi della chiave primaria nell’altra tabella.
  • 152. Esempio: chiave esterna
    • Nella tabella BIBLIOTECA, la colonna NomeCategoria fa riferimento ai valori della colonna NomeCategoria nella tabella CATEGORIA:
      • create table BIBLIOTECA ( Titolo VARCHAR2(100) primary key , Editore VARCHAR2(20), NomeCategoria VARCHAR2(20), Valutazione VARCHAR2(2), constraint CATFK foreign key (NomeCategoria) references CATEGORIA(NomeCategoria) );
  • 153. Eliminazione di tabelle
    • DROP: rimozione di una tabella
      • drop table STRANO;
    • TRUNCATE: svuota una tabella, eliminando tutte le righe
      • truncate table STRANO;
  • 154. Modifica di tabelle
    • Comando ALTER:
      • Aggiunta di colonne
      • Modifica di colonne
      • Rimozione di colonne
    • Regole:
      • Si può aggiungere o modificare una colonna in qualsiasi momento, purché non sia NOT NULL
      • Si può aggiungere una colonna NOT NULL eseguendo 3 passaggi
        • Aggiunta nuova colonna (senza specificare NOT NULL)
        • Riempimento della nuova colonna con valori predefiniti
        • Modifica della colonna in NOT NULL
  • 155. Esempio: aggiunta colonne
    • Aggiunta di 2 colonne alla tabella STRANO:
      • alter table STRANO add ( Condizione VARCHAR2(9), Vento NUMBER(3) );
  • 156. Esempio: modifica colonne
    • Modifica di una colonna:
      • alter table STRANO modify ( Condizione VARCHAR2(9) NOT NULL, Citta VARCHAR2(17) );
  • 157. Esempio: eliminazione
    • Eliminazione di una colonna:
      • alter table STRANO drop column Vento;
  • 158. Parte 4 PL/SQL
  • 159. Sicurezza e accesso
    • Utenti
      • Ogni utente ha nome, password, e possiede tabelle, viste e risorse da lui create
    • Ruoli
      • Sono serie di privilegi
      • I privilegi si associano ai ruoli, e i ruoli si associano agli utenti
    • Privilegi
      • Sono regole che consentono di eseguire determinate operazioni sul database
  • 160. Utenti
    • Creazione di un utente
      • Esistono utenti predefiniti
        • SYS: possiede le tabelle principali del database
        • SYSTEM: possiede altre tabelle e viste
      • L’utente SYSTEM può creare altri utenti
      • create user utente identified {by password | externally};
  • 161. Esempio: nuovo utente
    • Creo un nuovo utente Dora con password avocado:
      • create user Dora identified by avocado ;
    • Modifico la password:
      • alter user Dora identified by psyche ;
    • Assegnazione privilegi:
      • grant CREATE SESSION to Dora;
  • 162. Ruoli
    • Sono raccolte di privilegi di sistema che consentono agli utenti di effettuare operazioni:
      • CONNECT: consente accesso a funzioni base
      • RESOURCE: per utenti più avanzati, possono creare procedure, trigger, tipi di dati
      • DBA: per l’amministratore di sistema, accesso e privilegi completi
  • 163. Privilegi
    • GRANT: assegna privilegi
      • grant {privilegio sistema | ruolo | all [privileges] } [. {privilegio sistema | ruolo | all [privileges]} to {utente | ruolo} [. {utente | ruolo}] [identified by password ] [with admin option]
    • Esempio:
      • grant CONNECT to Judy;
  • 164. Revoca
    • REVOKE: revoca i privilegi di un utente
      • revoke {privilegio sistema | ruolo | all [privileges]} [, {privilegio sistema | ruolo | all [privileges]}, from {utente | ruolo} [, {utente | ruolo}].
  • 165. Privilegi per tabelle
    • Tabelle e viste:
      • INSERT
      • UPDATE
      • SELECT
      • DELETE
      • ALTER
      • INDEX
      • ALL (tutti i precedenti)
  • 166. Altri privilegi
    • Procedure, funzioni, package:
      • EXECUTE
    • Sequenze
      • ALTER, SELECT
    • Directory
      • READ
      • WRITE
  • 167. Esempio: privilegi
    • L’utente corrente concede l’accesso alla tabella COMFORT all’utente Bob:
      • grant select on COMFORT to Bob;
  • 168. Ruoli personalizzati
    • Creo un ruolo IMPIEGATO:
      • create role IMPIEGATO;
    • Do il privilegio di effettuare delle Select:
      • grant select on COMFORT to IMPIEGATO;
    • Do il privilegio di collegarsi al database:
      • grant CREATE SESSION to IMPIEGATO;
    • Assegno i privilegi di un ruolo a un altro:
      • grant IMPIEGATO to MANAGER;
  • 169. Indici
    • Elenco di parole chiave contenente la posizione delle informazioni relative a un argomento.
    • Esempio: indice analitico dei libri
    • Non sono necessari, ma velocizzano le prestazioni
    • Si creano con il comando CREATE INDEX:
      • create [bitmap | unique] index indice on tabella(colonna [,colonna]. . .) [reverse];
  • 170. Indici e chiavi
    • E’ una tecnica per garantire l’unicità delle chiavi.
    • Esempio:
      • create unique index BA$TITOLO_AUTORE on BIBLIOTECA_AUTORE(Titolo, NomeAutore);
    • Sono molto utili in tabelle grandi, in cui una (o più) colonne sono utilizzate spesso in clausole where con uguaglianza.
    • Lo svantaggio è un inserimento più lento delle righe nel database.
  • 171. Trigger
    • E’ un’azione che il database deve intraprendere quando si verifica un evento legato al database stesso.
    • Tecnica utilizzata in particolare per revisioni sui dati.
    • In genere sono legati alle operazioni fondamentali Insert, Delete e Update (DML)
    • Per utilizzare i trigger bisogna:
      • Possedere la tabella
      • Avere i privilegi di Alter sulla tabella
  • 172. Tipi di trigger
    • I tipi di trigger sono definiti da:
      • Tipo di transazione che li attiva
      • Livello cui è eseguito il trigger
        • Livello di riga
        • Livello di istruzione
        • Livello di database
  • 173. Livello di riga
    • Trigger a livello di riga:
      • Vengono eseguiti una sola volta per ogni riga su cui agisce un’istruzione.
      • Parola chiave: for each row
      • Utili per la sincronizzazione dei dati
  • 174. Livello di istruzione
    • Trigger a livello di istruzione:
      • Sono eseguiti una solta volta per ogni istruzione.
        • Se aggiungo 500 righe con una sola istruzione INSERT, il trigger viene eseguito 1 sola volta
      • Non vengono usati in genere sui dati, ma sul controllo delle istruzioni eseguite.
  • 175. Livello di database
    • Trigger a livello di database:
      • Si attivano su eventi legati al database, come connessioni, collegamenti, chiusure, avvii, ecc…
      • Serve per automatizzare le operazioni di gestione del database
  • 176. Altri trigger
    • BEFORE / AFTER:
      • Vengono eseguiti prima o dopo determinati eventi
      • All’interno del trigger si può fare riferimento a valori vecchi e nuovi nel database.
    • INSTEAD OF:
      • Rimpiazza determinate azioni.
      • In genere si usano sulle viste, per far operare invece sulle tabelle che compongono la vista.
    • Trigger di schema:
      • Operano su istruzioni che lavorano sugli schemi (create, alter, truncate, ecc…)
  • 177. Sintassi
    • Sintassi:
      • create [or replace] trigger [schema .] trigger { before | after | instead of } { clausola_evento_dml | { evento_ddl [or evento_ddl ]... | evento_database [or evento_database ]... } on { [schema .] schema | database } } [when ( condizione ) ] { blocco_pl/sql| istruzione_procedura_chiamata }
  • 178. Esempio: Trigger
    • Si vogliono registrare in una tabella AUDIT_BIBLIOTECA tutte le modifiche che vengono effettuate sulla colonna Classificazione di BIBLIOTECA.
    • La tabella AUDIT_BIBLIOTECA riceve una INSERT con i valori del dato che si sta cambiando (UPDATE) su BIBLIOTECA.
    • La clausola WHERE viene usata in modo particolare per indicare che utilizzeremo dati vecchi e nuovi .
    • SQL nella slide seguente…
  • 179. Esempio: Trigger before
      • create or replace trigger BIBLIOTECA_BEF_UPD_ROW before update on BIBLIOTECA for each row when (nuova.Classificazione != vecchia.Classificazione) begin insert into AUDIT_BIBLIOTECA (Titolo, Editore, NomeCategoria, Vecchia_Classificazione, Nuova_Classificazione, Data_Audit) values (:old.Titolo, :old.Editore, :old.NomeCategoria, :old.Classificazione, :new.Classificazione, Sysdate); end ;
  • 180. Procedure
    • Procedure:
      • Stored procedure : gruppi di istruzioni SQL memorizzate nel sistema
      • Si possono riutilizzare più volte
    • Funzioni:
      • Procedure che possono restituire valori agli utenti
    • Packages:
      • Raggruppamenti di procedure e comandi SQL
      • Sono compilati in automatico, ma possono essere ricompilati
  • 181. Procedure
    • Una volta memorizzata, può essere eseguita
    • Bisogna dare i permessi di esecuzione agli utenti:
      • grant execute on MIA_PROCEDURA to Dora;
      • In assenza dell’assegnazione diretta del privilegio precedente, gli utenti dovranno avere il privilegio generico EXECUTE ANY PROCEDURE per eseguire la procedura.
    • Sintassi:
      • execute NUOVO_LIBRO(‘ TITOLO ');
      • Il comando execute non serve se si è:
        • All’interno di un’altra procedura o funzione
        • In un trigger
        • In un package
  • 182. Sintassi
    • Sintassi:
      • create [or replace] procedure [schema .] procedura
      • [( argomento [ in | out | in out ] [nocopy] tipodati
      • [, argomento [ in | out | in out ] [nocopy] tipodati]...
      • )]
      • [authid { current_user | definer }]
      • { is | as } { corpo_sottoprogramma_sql |
      • language { java name 'stringa'| c [name nome] library nome_lib
      • [agent in ( argomento )]
      • [with context] [parameters ( parametri )]
      • }};
  • 183. Esempio
    • Procedura per inserire un nuovo libro in BIBLIOTECA e cancellare il titolo da una lista ordini LIBRO_ORDINE:
      • create or replace procedure NUOVO_LIBRO (aTitolo IN VARCHAR2, aEditore IN VARCHAR2, aNomeCategoria IN VARCHAR2)
        • as
        • begin
        • insert into BIBLIOTECA (Titolo, Editore, NomeCategoria, Classificazione)
        • values (aTitolo, aEditore, aNomeCategoria, NULL);
        • delete from LIBRO_ORDINE
        • where Titolo = aTitolo;
        • end ;
  • 184. Esecuzione
    • Esempio di esecuzione della procedura di prima:
      • execute NUOVO_LIBRO(‘ TITOLO','SANCTUARY PUB','SAGGIADULTI' );
  • 185. Funzione
    • E’ una procedura che restituisce un valore.
    • Sintassi:
      • create [or replace] function [schema .] funzione
      • [( argomento [ in | out | in out ] [nocopy] tipodati
      • [, argomento [ in | out | in out ] [nocopy] tipodati]...
      • )]
      • return tipodati
      • [{ clausola_privilegi_utentechiamante | deterministic | clausola_abilitazione_parallela }
      • [clausola_privilegi_utentechiamante | deterministic | clausola_abilitazione_parallela]...
      • ]
      • { { aggregate | pipelined } using [schema .] tipo_implementazione
      • | [pipelined] { is | as } { corpo_funzione_pl/sql | spec_chiamata }};
  • 186. Esempio
    • Si crea una funzione che restituisce la spesa dovuta ai ritardi nella riconsegna dei libri:
      • create or replace function SPESE_RITARDO (aNome IN VARCHAR2) return NUMBER is saldo NUMBER(10,2); begin select SUM(((DataRestituzione-DataPrestito) -14)*0.20) into saldo from BIBLIOTECA_PRESTITO where Nome = aNome; RETURN (saldo); end ;
  • 187. Package
    • Specifica e corpo del package sono creati separatamente:
      • Create Package
      • Create Package Body
      • Richiedono il privilegio CREATE ANY PROCEDURE
  • 188. Sintassi
    • Package:
      • create [or replace] package [utente.] package
      • [authid {definer | current_user} ]
      • {is | as}
      • specifica package ;
    • Package body:
      • create [or replace] package body [utente,] corpo package
      • {is | as}
      • corpo package ;
  • 189. Esempio specifica
    • Si crea un package che mette a disposizione dei suoi utenti alcune funzioni e procedure:
      • create or replace package GESTIONE_LIBRO
      • as
      • function SPESE_RITARDO(aNome IN VARCHAR2) return NUMBER;
      • procedure NUOVO_LIBRO (aTitolo IN VARCHAR2,
      • aEditore IN VARCHAR2, aNomeCategoria IN VARCHAR2);
      • end GESTIONE_LIBRO;
  • 190. Esempio Body 1/2
    • create or replace package body GESTIONE_LIBRO
    • as
    • function SPESE_RITARDO (aNome IN VARCHAR2)
    • return NUMBER
    • is
    • saldo NUMBER(10,2);
    • begin
      • select SUM(((DataRestituzione-DataPrestito) -14)*0.20)
      • into saldo
      • from BIBLIOTECA_PRESTITO
      • where Nome = aNome
      • and (DataRestituzione-DataPrestito) 14;
      • RETURN (saldo);
    • end SPESE_RITARDO;
    • Pagina 1/2
  • 191. Esempio Body 2/2
      • procedure NUOVO_LIBRO (aTitolo IN VARCHAR2,
      • aEditore IN VARCHAR2, aNomeCategoria IN VARCHAR2)
      • is
      • begin
        • insert into BIBLIOTECA
        • (Titolo, Editore, NomeCategoria, Classificazione)
        • values (aTitolo, aEditore, aNomeCategoria, NULL);
        • delete from LIBRO_ORDINE
        • where Titolo = aTitolo;
      • end NUOVO_LIBRO;
    • end GESTIONE_LIBRO;
    • Pagina 2/2
  • 192. Inizializzazione
    • I package possono includere comandi da eseguire ogniqualvolta il package viene chiamato, a prescindere dalla procedura o funzione chiamata all’interno del package.
    • I package consentono di eseguire comandi che non siano specifici delle procedure raggruppate.
    • Nell’esempio seguente, il corpo del package GESTIONE_LIBRO viene modificato in modo da includere un’istruzione SQL che registra il nome dell’utente corrente e l’indicatore orario per la prima volta in cui un componente del package viene eseguito all’interno della sessione.
  • 193. Esempio: inizializzazione
    • Si aggiunge in fondo al package l’inizializzazione:
      • […] //codice esempio precedente
      • begin
          • select Utente, SysDate
          • into Nome_Utente, Data_Voce
          • from DUAL;
      • end GESTIONE_LIBRO;
  • 194. Parte 5 Introduzione a EMC
  • 195. EMC
    • Enterprise Manager Console
    • SQL*Plus Worksheet
    • Introduzione all’uso attraverso esercizi in aula
  • 196. LICENZA
    • Questa produzione è regolata da Licenza Creative Commons:
    • Tu sei libero:
    • di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare quest'opera
    • di modificare quest'opera
    • Alle seguenti condizioni:
    • Attribuzione . Devi attribuire la paternità dell'opera nei modi indicati dall'autore o da chi ti ha dato l'opera in licenza e in modo tale da non suggerire che essi avallino te o il modo in cui tu usi l'opera.  
    • Non commerciale . Non puoi usare quest'opera per fini commerciali.
    • Condividi allo stesso modo . Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una licenza identica o equivalente a questa.