Vous allez utiliser SQLPLUS pour exécuter des commandes SQL de type DDL (création de tables) et DML (recherche, mises-à-jour, ...). On peut entrer directement les commandes en les tapant sous SQLPLUS, mais en cas de faute de frappe ou d'erreur, il est difficile de corriger le texte. Il est donc fortement recommandé de procéder de la manière suivante:
SQL> @req0
Sous SQLPLUS, vous avez quelques commandes utiles dont voici une brève liste.
SQL> desc tab // Donne le schema de la table 'tab'. SQL> select table_name from user_tables; // Liste des tables que vous avez creees. SQL> list // Affiche le dernier ordre execute SQL> spool fic // Copie l'affichage a l'ecran dans 'fic.lst' SQL> spool off // Stoppe la copie dans 'fic.lst' SQL> exit; // Sortir de SQLPLUS
Les commandes DROP TABLE permettent d'exécuter le fichier de création plusieurs fois de suite, en détruisant d'abord les tables éventuellement crées lors des exécutions précédentes. Il faut détruire les tables dans l'ordre inverse de création, afin de ne pas violer les contraintes de FOREIGN KEY.
Au départ, il n'y a aucune table dans votre propre espace ORACLE, mais vous avez accès au schéma et à la base de données ``Officiel des spectacles'', vue et revue en cours, qui est partagée (en lecture) par tout le monde. Voici les commandes qui ont étées utilisées pour la création du schéma de cette base (attention: les tables existent déjà, ne retapez pas les commandes de création ci-dessous):
DROP TABLE seance; DROP TABLE salle; DROP TABLE cinema; DROP TABLE role; DROP TABLE film; DROP TABLE artiste; CREATE TABLE Artiste (Nom VARCHAR2 (20) NOT NULL, Prenom VARCHAR2 (15), Annee_naissance NUMBER(4) , PRIMARY KEY (Nom)); CREATE TABLE film (ID_film NUMBER(10) NOT NULL, Titre VARCHAR2(30), Annee NUMBER(4), Nom_Realisateur VARCHAR2(20), PRIMARY KEY (ID_film), FOREIGN KEY (Nom_realisateur) REFERENCES Artiste); CREATE TABLE Role (Nom_role VARCHAR2(20) NOT NULL, ID_film NUMBER (10) NOT NULL, Nom_acteur VARCHAR2 (20) NOT NULL, PRIMARY KEY (ID_film, nom_acteur), FOREIGN KEY (ID_film) REFERENCES Film ON DELETE CASCADE, FOREIGN KEY (Nom_acteur) REFERENCES Artiste ON DELETE CASCADE); CREATE TABLE cinema (Nom_cinema VARCHAR2 (10) NOT NULL, Arrondissement NUMBER (2), Adresse VARCHAR2 (30), PRIMARY KEY (Nom_cinema)); CREATE TABLE salle (Nom_cinema VARCHAR2(10) NOT NULL, No_salle NUMBER(2) NOT NULL, Climatise CHAR(1), Capacite NUMBER(4), PRIMARY KEY (Nom_cinema, No_salle), FOREIGN KEY (Nom_cinema) REFERENCES cinema ON DELETE CASCADE); CREATE TABLE seance (Nom_cinema VARCHAR2(10) NOT NULL, No_salle NUMBER(2) NOT NULL, No_seance NUMBER(2) NOT NULL, Heure_debut NUMBER (4,2), Heure_fin NUMBER (4,2), ID_film NUMBER(10) NOT NULL, PRIMARY KEY (Nom_cinema, No_salle, No_seance), FOREIGN KEY (Nom_cinema, No_salle) REFERENCES salle ON DELETE CASCADE);
Vous pouvez remarquer que des hypothèses simplificatrices ont été faites sur les clés de certaines tables: on admet par exemple que le nom du cinéma est la clé pour un cinéma. Ce n'est certainement pas tout à fait correct (cf. le cours sur le modèle relationnel), mais cela permet de simplifier les requêtes.
Remarques importantes :
select * from film where UPPER(titre) = 'VERTIGO';Sinon, vous pouvez vous baser sur la convention suivante: toutes les chaînes de caractères commencent par une majuscule suivie de minuscules.