Per le esercitazioni in laboratorio e la parte realizzativa del progettino da realizzare durante il corso, si fa uso di DBMS commerciale, in particolare si fa uso di Oracle9i Lite, una versione semplificata di Oracle9i che gira sotto WindowsNT/2000/XP. Per maggiori informazioni su questo sistema si faccia riferimento alla Oracle9i Lite Documentation.
Per installare Oracle 9i Lite è necessario installare precedentemente Java 2 Standard Development Kit (J2SDK), (disponibile in diverse versioni sul sito java.sun.com ). Per eseguire Oracle9i è raccomandata la versione 1.3.1 (o successiva). Noi consigliamo di scaricare ed installare la versione 1.4.1 (circa 36 MB), in quanto l'installazione della versione 1.4.2 (ultima release) avviene on-line e richiede in genere un tempo di connessione più lungo.
Una volta eseguita l'installazione del J2SDK, settate opportunamente la variabile di ambiente PATH.
Per installare Oracle9i procedete come segue:
Lo strumento base per accedere al DBMS di Oracle9i Lite è l' interprete di comandi SQL, MSQL (Mobile SQL). Per utilizzare questo programma, bisogna operare dal prompt di comandi MS-DOS attraverso i seguenti parametri in linea
msql <user'sname>/<password>@<host string>
dove
msql system/manager@jdbc:polite:polite
dove manager può essere sostituita da qualsaisi altra password.
Per il DSN polite, la sorgente di dati è localizzata in <oracle_home>\Mobile\SDK\oldb40. Quindi, ogni database con DSN polite è creato nella cartella <oracle_home>\Mobile\SDK\oldb40. Più precisamente, per il database polite, viene creato il file polite.odb.
Una volta connessi alla base di dati, dopo una serie di massaggi, appare il prompt di MSQL:
SQL >A questo punto si possono digitare comandi SQL che andranno ad operare sulla base di dati a cui si è connessi.
Per creare una nuova base di dati, operate dal prompt dei comandi. Se, ad esempio, volete creare una base di dati chiamata newdb:
createdb polite newdbe premete Invio. In questo modo viene creato il database newdb con DSN polite. A questo punto, è possibile connettersi al database newdb attraverso il comando
msql system/manager@jdbc:polite:newdb
Nota: Se riscontrate problemi nell'accesso alla
nuova base di dati, in particolare se viene restituito l'errore database
inesistente,
fate riferimento a questa breve
guida per la creazione di una base di dati
SQL>
possiamo scrivere qualsiasi comando SQL.
Iniziamo creando un nuovo utente, il comando SQL ha la seguente forma: create user <nome-utente> identified by <password> ;
dove <nome-utente>
è il nome del nuovo utente e
<password>
è la password assegnatagli (l'utente una volta
connessosi alla base di dati potrà cambiare la password attraverso il comando
alter user <nome-utente> identified by <nuova-password>
;
). Si noti che in MSQL tutti i comandi SQL devono terminare con il
punto e virgola.
Si tenga presente che SQL è "case-insensitive". Quindi in MSQL, si possono usare indifferentemente maiuscole o minuscole (questo vale anche per la password). Si noti però che i dati di tipo stringa fanno distinzione tra maiuscole e minuscole.
Per eliminare un utente si usa il comando:drop user <nome-utente> ;che elimina l'utente e tutti gli oggetti della base di dati ad esso associati.
Una volta creato l'utente si devono associare ad esso gli opportuni permessi
attraverso il comando SQL grant
. Si ricorda che il comando
grant
permette di dare diritti di inserimento, cancellazione,
aggiornamento, e interrogazione di una tavola a determinati utenti. Inoltre
grant
può essere usato per associare ruoli prestabiliti, in
particolare in Oracle9i Lite permette di associare due ruoli:
admin
, con tutti i privilegi per la gestione di utenti;
ddl
, con in aggiunta tutti i privilegi per la gestione delle
tavole. grant ddl to <nome-utente> ;dà tutti i diritti all'utente
<nome-utente>
.
Per rievocare privilegi ad un utente si usa il comando SQL
revoke
. Questo si utilizza pure per revocare ruoli. Ad esempio:
revoke ddl from <nome-utente> ;revoca il ruolo
ddl
a <nome-utente>
.
Per uscire da MSQL, si deve digitare:
quitoppure
exitin risposta al prompt.
In MSQL possiamo eseguire qualsiasi comando SQL. Per creare una tavola si
usa il comando SQL standard create table
avente la forma
seguente:
create table <nome-tavola> ( <lista di attributi e tipi ad essi associati> );
Nello scrivere un comando si può andare a capo. Se il comando occupa più linee, ad ogni return viene dato un prompt speciale con il numero di linea corrente fino a che non si digita il punto e virgola o un return lasciando una riga vuota. Nel primo caso viene eseguito il comando; nel secondo caso il comando viene memorizzato su un buffer (si veda Buffer di editing).
Un esempio di creazione è il seguente:
create table Test ( i int, s char(10) );
Questo comando crea una tavola chiamata TEST
con due attributi:
il primo, chiamato i
, è un intero; il secondo, chiamato
s
, è una stringa lunga al più 10 caratteri.
Dopo aver creato una tavola possiamo inserirvi tuple utilizzando il comando
insert
. La maniera più semplice è inserire direttamente i
valori:
insert into <nome-tavola> values( <lista ordinata dei valori da inserrire negli attributi);
Per esempio, possiamo inserire la tupla (10, 'foobar')
nella
tavola Test
come segue:
insert into Test values(10,'foobar');Analogamente, per cancellare ed aggiornare tuple si utilizzano i comandi
delete
e
update
.
Possiamo vedere quali sono i valori memorizzati in una tavola attraverso una semplice query:
select * from <nome-tavola> ;
Per esempio, dopo aver creato la tavola test
ed aver inserito la
tupla (10,'foobar')
il comando:
select * from Test;
restituisce il seguente risultato
I S ---------- ---------- 10 foobar
Per eliminare una tavola dalla base di dati, si esegue:
drop table <nome-tavola> ;
In generale dopo aver creato tavole di prova si suggerisce di eliminarle con
drop table
per mantere pulita la base di dati. Ad esempio
eseguire:
drop table Test;
alla fine della sessione di prova.
Le modifiche che si effettuano sulla base di dati non sono permanenti fino a che non si dà il comando:
commit;a fronte di tale comando la base di dati viene permanentemente modificata.
Prima che sia dato il commit
è possibile eliminare tutte le
modifiche fino al commit
precedente con il comando:
rollback;
Si noti che i comandi di aggiornamento tra due commit
formano
una transazione, cioè un'azione sulla base di dati da considerarsi come
una unità.
è possibile far generare i comandi di commit
in modo automatico
da MSQL dopo ogni istruzione DDL di SQL, digitando:
set autocommit onL'
autocommit
si
disattiva digitando: set autocommit offInfine digitando:
show autocommitsi verifica lo stato attuale dell'
autocommit
.
Il DBMS mantiene tutte le informazioni sulla base di dati (metadati)
in delle tavole di sistema che formano il cosiddetto catalogo. Le tavole
del catalogo sono interrogabili attraverso SQL esattamente come le tavole create
dagli utenti. L'elenco completo delle tavole lo si trova in Oracle9i Lite
User's Guide. Qui ci occupiamo solo della tavola ALL_TABLES
che
contiene le infomazioni su tutte le tavole della base di dati. In particolare se
non ci si ricorda quali sono le tavole dell'utente
<nome-utente>
si può utilizzare la seguente query:
select TABLE_NAME from ALL_TABLES where OWNER = '<nome-utente>'
Dato il nome della tavola è possibile ottenere i suoi attributi (nome e tipo) con il comando:
describe <nome-tavola>
Per esempio, per sapere gli attributi memorizzati dal sistema in
ALL_TABLES
si può usare:
describe ALL_TABLES
Anzichè eseguire comandi SQL digitandoli su terminale è spesso più conveniente scriverli in un file di testo e poi richiamarli da MSQL.
Supponiamo di aver scritto alcuni comandi SQL in un file foo.sql
nella directory corrente. Possiamo eseguire il file da MSQL con il
comando:
@foo.sqloppure:
start foo.sql
Se non viene specificata nessuna estensione per il file, cioè se scriviamo
@foo
, allora MSQL assume che l'estensione sia sql
.
è ovviamente possibile anche specificare il path completo del file. Ad esempio possiamo scrivere
@d:\degiacomo\foo.sql
.
Se si termina un comando con una riga vuota, invece del punto e virgola, il comando viene memorizzato in un buffer. Questo comando può essere eseguito dal buffer digitando un singolo slash (/).
Il comando nel buffer può essere editato prima di eseguirlo. Per fare ciò si può utilizzare un editor di linea interno a MSQL, oppure un editor esterno. I comandi principali dell'editor di linea sono i seguenti:
|
mostra il contenuto del buffer e pone l'ultima linea del buffer come "linea corrente" |
n |
mostra la linea n-esima del buffer, and la rende la linea corrente |
m n |
mostra le linee da m a n e rende la linea n la linea corrente |
|
permette di inserire nuove linee dopo la linea corrente; |
|
sostituisce il testo " |
|
aggiunge " |
|
cancella la linea corrente |
Per avere una copia su file di una sessione di lavoro su può usare il
comando spool
di MSQL. In particolare digitando:
spool <nome-file>
viene creato un file con estensione di default .lst
nella
directory corrente e in esso viene copiato tutto ciò che appare su terminale
fino a che non si esce da MSQL o non si digita
spool off
I caratteri speciali non possono essere utilizzati se non in stringhe. In queste, per ottenere l'apostrofo (poichè una stringa è delimitata da singoli apici) si usano due apostrofi. Ad esempio:
'città' del solè
Per altri caratteri, ad esempio & si usano sequenze di escape. Per definire il carattere di escape si usa il comando:
set escape <char>Ad esempio, con il comando:
set escape ^possiamo scrivere
'Johnson
^& son'
. Per farsi mostrare il carattere di escape attuale si usa il
comando: show escapePer eliminare il carattere di escape definito si usa il comando:
set escape off