Per la parte realizzativa delle tesine si fa uso di DBMS commerciale, in particolare si fa uso di Oracle8i Lite una versione semplificata di Oracle8i che gira sotto WindowsNT, Windows98 e Windows95. Per maggiori informazioni su questo sistema si faccia riferimento ai seguenti documenti:
Lo strumento base per accedere al DBMS di Oracle8i Lite e' un interprete di comandi SQL: SQL*Plus. Ci sono due modi per utilizzare questo programma.
sqlplus. Questo comando esegue SQL*Plus direttamente su
una finestra MS-DOS, il che e' particolarmente utile se, ad esempio
utilizzando Java, si mandano stringhe sulle stream di uscita o di
errore, le quali possono essere lette su una finestra MS-DOS, mentre
non vengono visualizzate su finestre grafiche quali quella di SQL*Plus
eseguito da menu avvio.Per connettersi alla base di dati si devono fornire a SQL*Plus i seguenti parametri:
system, un utente predefinito con tutti i
privilegi sulla base di dati.manager nel caso dell'utente system (in
realta', inizialmente, system accetta qualsiasi password).
odbc:polite per connettersi alla base di dati di default,
oppure odbc:polite:<nomedb> per connettersi ad una
base di dati di nome <nomedb> creata da utente (per
creare una base di dati si puo' usare Oracle8 Navigator - si veda
Oracle8i Lite User Guide).
sqlplus<user'sname>/<password>@<host string>Ad esempio:
sqlplus system/manager@odbc:polite
Una volta connessi alla base di dati, dopo una serie di massaggi, appare il prompt di SQL*Plus:
SQL >A questo punto si possono digitare comandi SQL.
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> e' il nome del nuovo utente e
<password> e' la password assegnatagli (l'utente una
volta connessosi alla base di dati potra' cambiare la password attraverso il
comando alter user <nome-utente> identified by
<nuova-password> ;). Si noti che in SQL*Plus tutti i
comandi SQL devono terminare con il punto e virgola.
Si tenga presente che SQL e' "case-insensitive". Quindi in SQL*Plus, si possono usare indifferentemente maiuscole o minuscole (questo vale anche per la password). Si noti pero' 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 puo' essere usato per
associare ruoli prestabiliti, in particolare in Oracle8i 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> ;da' 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 SQL*Plus, si deve digitare:
quitoppure
exitin risposta al prompt.
In
SQL*Plus 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 puo' andare a capo. Se il comando occupa piu' 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 e' il seguente:
create table Test ( i int, s char(10) );
Questo comando crea una tavola chiamata TEST con due
attributi: il primo, chiamato i, e' un intero; il secondo,
chiamato s, e' una stringa lunga al piu' 10 caratteri.
Dopo aver creato una tavola possiamo inserirvi tuple
utilizzando il comando insert. La maniera piu' semplice
e' 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 da' il comando:
commit;a fronte di tale comando la base di dati viene permanentemente modificata. Prima che sia dato il
commit e' 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, cioe' un'azione sulla base di dati da considerarsi come una unita'.
E' possibile far generare i comandi di commit in modo automatico da SQL*Plus 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 Oracle8i 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 puo' utilizzare la seguente query:
select TABLE_NAME from ALL_TABLES where OWNER = '<nome-utente>'
Dato il nome della tavola e' 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 puo' usare:
describe ALL_TABLES
Anziche' eseguire comandi SQL digitandoli su terminale e' spesso piu' conveniente scriverli in un file di testo e poi richiamarli da SQL*Plus.
Supponiamo di aver scritto alcuni comandi SQL in un
file foo.sql nella directory corrente. Possiamo eseguire
il file da SQL*Plus con il comando:
@foo.sqloppure:
start foo.sql
Se non viene specificata nessuna estensione per il file, cioe'
se scriviamo @foo, allora SQL*Plus assume che l'estensione
sia sql.
E' ovviamente possibile anche specificare il path completo del file,
mettendolo tra singoli apici. 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 puo' essere eseguito dal buffer digitando:
run
oppure digitando un singolo slash (/).
Il comando nel buffer puo' essere editato prima di eseguirlo. Per fare cio' si puo' utilizzare un editor di linea interno a SQL*Plus, 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 |
In alternativa si puo' chiamare da SQL*Plus un editor esterno attraverso il comando edit.
Se digitiamo:
edit <nome-file.sql>
il buffer viene memorizzato come file di testo
nome-file.sql nella directory corrente e poi viene passato a editor di testo di Windows (tipicamente "Blocco Note"). E' possibile
ridefinire l'editor chiamato attraverso il comando
define_editor. Ad esempio:
define_editor = "emacs"
definisce l'editor emacs come editor da chiamare con
edit.
save <nome-file.sql>
Per avere una copia su file di una sessione di lavoro su puo' usare
il comando spool di SQL*Plus. In particolare digitando:
spool <nome-file>
viene creato
un file con estensione di default .lst nella directory
corrente e in esso viene copiato tutto cio' che appare su terminale
fino a che non si esce da SQL*Plus o non si digita
spool off
I caratteri speciali non possono essere utilizzati se non in stringhe. In queste, per ottenere l'apostrofo (poiche' una stringa e' delimitata da singoli apici) si usano due apostrofi. Ad esempio:
'citta'' del sole'
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