Introduzione ad Oracle8i Lite



Introduzione

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:


Accesso al DBMS via SQL*Plus

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.

Per connettersi alla base di dati si devono fornire a SQL*Plus i seguenti parametri:

Se si esegue SQL*Plus da linea di comando si devono fornire questi parametri in linea:
    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.


Creare ed eliminare utenti

In risposta al prompt 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.


Privilegi e ruoli di un utente

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:

Ad esempio:
     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>.


Uscire da SQL*Plus

Per uscire da SQL*Plus, si deve digitare:

     quit
oppure
     exit
in risposta al prompt.


Creare tavole

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.


Inserire tuple

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.


Interrogare tavole

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


Eliminare tavole

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.


Commit e rollback

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 on
L'autocommit si disattiva digitando:
    set autocommit off
Infine digitando:
    show autocommit
si verifica lo stato attuale dell'autocommit.


Utilizzare il catalogo

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


Eseguire comandi memorizzati su file

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.sql
oppure:
     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'.

Nota: per realizzare una base di dati e' utile preparare i seguenti file:


Buffer di editing

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:

L

mostra il contenuto del buffer e pone l'ultima linea del buffer come "linea corrente"

L n

mostra la linea n-esima del buffer, and la rende la linea corrente

L m n

mostra le linee da m a n e rende la linea n la linea corrente

I

permette di inserire nuove linee dopo la linea corrente;
per terminare l'inserimento bisogna digitare return due volte

C /vecchio/nuovo

sostituisce il testo "vecchio" con "nuovo" nella linea corrente

A testo

aggiunge "testo" alla fine della linea corrente

DEL

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.

E' anche possibile salvare il buffer (senza editarlo) attraverso il comando
    save <nome-file.sql>


Registrare una sessione di lavoro

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


Caratteri speciali

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 escape
Per eliminare il carattere di escape definito si usa il comando:
     set escape off


Questo documento e' stato scritto da Giuseppe De Giacomo per il Corso di Basi di Dati, Ingegneria Informatica, Universita' di Roma "La Sapienza", anno accademico 1999/2000. Nello scrivere lo stesso si e' fatto riferimento a documenti analoghi scritti da Shuguang Hong, Georgia State University, USA, Tim Finin, University of Maryland, USA, e Jeff Ullman, Stanford University, USA.