But du chapitre
Ce chapitre vous présente les tables et les principaux objets de base de données, et les relations qu'ils
entretiennent. Il vous apprend également à créer, modifier et supprimer des tables.
Le langage SQL et l'outil iSQL 9-2
Objets de base de données
Une base de données Oracle peut contenir de nombreuses structures de données. Chaque structure doit être
prédéfinie lors de la conception de la base de données pour pouvoir être créée durant la phase d'élaboration de
la base.
• Table : stocke les données
• Vue : sous-ensemble de données issu d'une ou de plusieurs tables
• Séquence : générateur de valeurs numériques
• Index : améliore les performances de certaines interrogations
• Synonyme : permet d'affecter un autre nom à un objet
Structures des tables Oracle9i
• Vous pouvez créer des tables à tout moment, même lorsque la base de données est déjà en cours
d'utilisation.
• Il n'est pas nécessaire de préciser la taille des tables, car celle-ci sera définie en fonction de l'espace
total alloué à la base de données. Il est important, néanmoins, d'estimer l'espace qu'occupera une table
avec le temps.
• La structure des tables peut être modifiée en ligne.
Remarque : Il existe d'autres objets de base de données qui ne sont pas présentés dans ce cours.
Le langage SQL et l'outil iSQL 9-3
Règles d'appellation
Vous devez nommer les tables et colonnes de base de données selon les règles d'appellation applicables à
tous les objets de base de données Oracle :
• Les noms de table et de colonne doivent commencer par une lettre et peuvent comporter de 1 à 30
caractères.
• Les noms ne peuvent contenir que les caractères A à Z, a à z, 0 à 9, _ (soulignement), $ et #
(caractères autorisés, mais déconseillés).
• Les noms ne doivent pas être identiques à ceux d'autres objets appartenant au même utilisateur du
serveur Oracle.
• Ces noms ne doivent pas correspondre à des mots réservés du serveur Oracle.
Remarque
Affectez aux tables et aux autres objets de base de données des noms significatifs.
Remarque : Les majuscules et minuscules ne sont pas différenciées dans les noms. Par exemple,
EMPLOYEES est traité comme eMPloyees ou eMpLOYEES.
Pour plus d'informations, voir Oracle9i SQL Reference, "Object Names and Qualifiers".
Le langage SQL et l'outil iSQL 9-4
Instruction CREATE TABLE
L'instruction SQL CREATE TABLE permet de créer des tables pour stocker des données. Elle fait partie
des instructions LDD (langage de définition des données) qui sont présentées dans les chapitres suivants.
Les instructions LDD constituent un sous-ensemble d'instructions SQL qui permettent de créer, de
modifier ou de supprimer des structures de base de données Oracle9i. Elles agissent directement sur la
base de données et enregistrent des informations dans le dictionnaire de données.
Pour créer une table, l'utilisateur doit disposer du privilège CREATE TABLE et d'un espace de stockage
dans lequel il pourra créer des objets. L'administrateur de base de données utilise des instructions LCD
(langage de contrôle de données) pour accorder des privilèges aux utilisateurs. Ces instructions sont
présentées dans un chapitre ultérieur.
Explication de la syntaxe :
schema désigne le nom du propriétaire de la table
table désigne le nom de la table
DEFAULT expr indique la valeur par défaut à utiliser en cas d'absence de valeur
dans l'instruction INSERT
column désigne le nom de la colonne
datatype désigne le type de données et la longueur de la colonne
Le langage SQL et l'outil iSQL 9-5
Référencer des tables appartenant à un autre utilisateur
Un schéma est un ensemble d'objets. Les objets de schéma sont des structures logiques qui font directement
référence aux données d'une base. Ils peuvent contenir des tables, des vues, des synonymes, des séquences,
des procédures stockées, des index, des clusters et des liens de base de données.
Lorsqu'une table n'appartient pas à l'utilisateur, son nom doit être précédé du nom de son propriétaire. Par
exemple, si un schéma nommé USER_B possède une table EMPLOYEES, utilisez la commande suivante pour
extraire des données de cette table :
SELECT *
FROM user_b.employees;
Le langage SQL et l'outil iSQL 9-6
Option DEFAULT
L'option DEFAULT permet d'affecter une valeur par défaut à une colonne. Cette option empêche
l'insertion de valeurs NULL dans une colonne lors de l'insertion d'une ligne qui ne comporte pas de valeur
pour cette colonne. La valeur par défaut peut être un littéral, une expression ou une fonction SQL, par
exemple, SYSDATE et USER. En revanche, il ne peut pas s'agir du nom d'une autre colonne ou d'une
pseudo-colonne, tel que NEXTVAL ou CURRVAL. L'expression par défaut doit correspondre au type de
données de la colonne.
Remarque : Les valeurs CURRVAL et NEXTVAL sont présentées ultérieurement.
Le langage SQL et l'outil iSQL 9-7
Créer des tables
L'exemple de la diapositive présente la création de la table DEPT comportant trois colonnes nommées
DEPTNO, DNAME et LOC, puis la vérification de cette création à l'aide de la commande DESCRIBE.
Etant donné que la création d'une table fait appel à une instruction LDD, une validation automatique est
effectuée à l'exécution de cette instruction.
Le langage SQL et l'outil iSQL 9-8
Tables de la base de données Oracle
Les tables utilisateur telles que EMPLOYEES sont créées par l'utilisateur. Le dictionnaire de données
constitue un autre ensemble de tables et de vues dans la base de données Oracle. Cet ensemble créé et
géré par le serveur Oracle contient des informations relatives à la base de données.
Toutes les tables du dictionnaire de données appartiennent à l'utilisateur SYS. Les utilisateurs accèdent
rarement aux tables de base, car les informations qu'elles contiennent sont relativement complexes. En
effet, ils consultent généralement les vues du dictionnaire de données, dont le format est plus simple à
comprendre. Les informations stockées dans le dictionnaire de données incluent le nom des utilisateurs du
serveur Oracle, les privilèges accordés aux utilisateurs, le nom des objets de base de données, les
contraintes des tables et des informations d'audit.
Il existe quatre catégories de vues du dictionnaire de données, chacune possédant un préfixe distinct qui
indique son utilisation.
Préfixe Description
USER_ Ces vues contiennent des informations relatives aux objets appartenant à l'utilisateur.
ALL_ Ces vues contiennent des informations relatives à toutes les tables (tables objet et tables
relationnelles) accessibles à l'utilisateur.
DBA_ Ces vues sont des vues d'accès restreint accessibles uniquement aux utilisateurs disposant
du rôle DBA.
V$ Ces vues sont des vues dynamiques qui fournissent des informations sur les performances
du serveur de bases de données, sur la mémoire et sur les verrouillages.
Le langage SQL et l'outil iSQL 9-9
Interroger le dictionnaire de données
Vous pouvez interroger les tables du dictionnaire de données pour afficher différents objets de base de
données vous appartenant. Les tables du dictionnaire de données les plus fréquemment utilisées sont les
suivantes :
• USER_TABLES
• USER_OBJECTS
• USER_CATALOG
Remarque : CAT est un synonyme de USER_CATALOG. Vous pouvez l'utiliser à la place de
USER_CATALOG dans les instructions SQL.
SELECT *
FROM CAT;
Le langage SQL et l'outil iSQL 9-10
Types de données
Type de données Description
VARCHAR2(size) Données alphanumériques de longueur variable (une taille
maximale doit être indiquée – la taille minimale est 1, la taille
maximale 4000)
CHAR [(size)] Données alphanumériques de longueur fixe dont la taille est
exprimée en octets (la taille minimale, qui correspond à la taille par
défaut, est 1 et la taille maximale 2000)
NUMBER [(p,s)] Nombre possédant la précision p et l'échelle s (la précision, qui peut
être comprise entre 1 et 38, correspond au nombre total de chiffres
décimaux et l'échelle, qui peut être comprise entre 84 et 127,
correspond au nombre de chiffres situés à droite du signe décimal)
DATE Valeur de date et d'heure (à la seconde la plus proche) entre le 1er
janvier 4712 av. J.-C. et le 31 décembre 9999 apr. J.-C.
LONG Données alphanumériques d'une longueur variable pouvant atteindre
2 giga-octets
CLOB Données alphanumériques de 4 giga-octets maximum
Le langage SQL et l'outil iSQL 9-11
Types de données (suite)
Type de données Description
RAW(size) Données binaires raw (une taille maximale pouvant atteindre 2000
doit être indiquée)
LONG RAW Données binaires raw d'une longueur variable pouvant atteindre
2 giga-octets
BLOB Données binaires de 4 giga-octets maximum
BFILE Données binaires stockées dans un fichier externe, de 4 giga-octets
maximum
ROWID Système numérique en base 64 représentant l'adresse unique d'une
• ligne
Une colonne LONG n'est pas danslors
copiée sa table
de la création d'une table à l'aide d'une sous-interrogation.
• Une colonne LONG ne peut pas être incluse dans une clause GROUP BY ou ORDER BY.
• Une seule colonne LONG peut être utilisée par table.
• Aucune contrainte ne peut être définie sur une colonne LONG.
• Vous avez la possibilité d'utiliser une colonne CLOB plutôt qu'une colonne LONG.
Le langage SQL et l'outil iSQL 9-12
Autres types de données d'horodatage
Type de données Description
TIMESTAMP Permet d'enregistrer l'heure sous forme de date avec partie décimale des
secondes. Il existe plusieurs variantes de ce type de données.
INTERVAL YEAR TO Permet d'enregistrer l'heure sous la forme d'un intervalle en années et
MONTH en mois et de représenter l'écart entre deux valeurs d'horodatage lorsque
les seuls éléments importants sont l'année et le mois.
INTERVAL DAY TO Permet d'enregistrer l'heure sous forme d'un intervalle en jours (heures,
SECOND minutes et secondes) et de représenter l'écart exact entre deux valeurs
d'horodatage.
Le langage SQL et l'outil iSQL 9-13
Types de données d'horodatage
fractional_seconds_precision permet d'indiquer éventuellement le nombre de chiffres de la
partie décimale des secondes du champ d'horodatage SECOND. Sa valeur peut être comprise entre 0 et 9
(la valeur par défaut étant 6).
Exemple
CREATE TABLE new_employees
(employee_id NUMBER,
first_name VARCHAR2(15),
last_name VARCHAR2(15),
...
start_date TIMESTAMP(7),
...);
L'exemple ci-dessus présente la création de la table NEW_EMPLOYEES comportant une colonne nommée
start_date dont le type de données est TIMESTAMP. La valeur "7" indique la précision relative à la
partie décimale des secondes (si elle n'est pas indiquée, la précision prend par défaut la valeur "6").
Supposons que deux lignes sont insérées dans la table NEW_EMPLOYEES. Les différences s'affichent à
l'écran (le type de données DATE affiche par défaut la date au format DD-MON-RR) :
SELECT start_date
FROM new_employees;
17-JUN-87 12.00.00.000000 AM
21-SEP-89 12.00.00.000000 AM
Le langage SQL et l'outil iSQL 9-14
Types de données d'horodatage
UTC désigne le temps universel coordonné, anciennement appelé temps moyen de Greenwich. Deux
valeurs TIMESTAMP WITH TIME ZONE sont considérées comme identiques si elles représentent le
même instant de l'UTC, quelles que soient les informations sur le fuseau horaire.
Etant donné que le type de données TIMESTAMP WITH TIME ZONE permet également de stocker des
informations relatives aux fuseaux horaires, il est particulièrement adapté à l'enregistrement
d'informations de date qui doivent être rassemblées ou coordonnées sur plusieurs régions géographiques.
Par exemple,
TIMESTAMP '1999-04-15 8:00:00 -8:00'
correspond à
TIMESTAMP '1999-04-15 11:00:00 -5:00'
En effet, 8h00 à l'heure normale du Pacifique correspond à 11h00 à l'heure normale de l'Est.
Vous pouvez également indiquer :
TIMESTAMP '1999-04-15 8:00:00 US/Pacific'
Remarque : fractional_seconds_precision permet d'indiquer éventuellement le nombre de
chiffres de la partie décimale des secondes du champ d'horodatage SECOND. Sa valeur peut être comprise
entre 0 et 9 (la valeur par défaut étant 6).
Le langage SQL et l'outil iSQL 9-15
Types de données d'horodatage (suite)
Vous pouvez indiquer des colonnes de type TIMESTAMP WITH LOCAL TIME ZONE dans la clé
primaire ou unique. Le déplacement de fuseau horaire correspond à la différence (en heures et minutes)
entre l'heure locale et l'UTC. Il n'existe pas de littéral pour TIMESTAMP WITH LOCAL TIME ZONE.
Remarque : fractional_seconds_precision permet d'indiquer éventuellement le nombre de
chiffres de la partie décimale des secondes du champ d'horodatage SECOND. Sa valeur peut être comprise
entre 0 et 9 (la valeur par défaut étant 6).
Exemple
CREATE TABLE time_example
(order_date TIMESTAMP WITH LOCAL TIME ZONE);
INSERT INTO time_example VALUES('15-NOV-00 09:34:28 AM');
SELECT *
FROM time_example;
order_date
----------------------------
15-NOV-00 09.34.28.000000 AM
Le type de données TIMESTAMP WITH LOCAL TIME ZONE convient pour les applications à deux
niveaux dans lesquelles vous souhaitez afficher les dates et heures du fuseau horaire du système client.
Le langage SQL et l'outil iSQL 9-16
Type de données INTERVAL YEAR TO MONTH
INTERVAL YEAR TO MONTH permet d'enregistrer une période à l'aide des champs d'horodatage YEAR et
MONTH. Ce type de données permet de représenter la différence entre deux valeurs d'horodatage lorsque
les seuls éléments importants sont l'année et le mois. Par exemple, vous pouvez utiliser cette valeur pour
définir un rappel à une date ultérieure de 120 mois ou pour vérifier si 6 mois se sont écoulés depuis une
date donnée.
Utilisez INTERVAL YEAR TO MONTH comme suit :
INTERVAL YEAR [(year_precision)] TO MONTH
Explication de la syntaxe :
year_precision correspond au nombre de chiffres du champ d'horodatage YEAR. La
valeur par défaut de year_precision est 2.
Exemple
CREATE TABLE time_example2
(loan_duration INTERVAL YEAR (3) TO MONTH);
INSERT INTO time_example2 (loan_duration)
VALUES (INTERVAL '120' MONTH(3));
SELECT TO_CHAR( sysdate+loan_duration, 'dd-mon-yyyy')
FROM time_example2; --today’s date is 26-Sep-2001
Le langage SQL et l'outil iSQL 9-17
Type de données INTERVAL DAY TO SECOND
INTERVAL DAY TO SECOND permet d'enregistrer une période en termes de jours, d'heures, de minutes
et de secondes.
Ce type de données permet de représenter l'écart exact entre deux valeurs d'horodatage. Par exemple,
vous pouvez utiliser cette valeur pour définir un rappel dans un délai de 36 heures ou pour enregistrer le
temps écoulé entre le début et la fin d'une course. Pour représenter des périodes plus longues (incluant,
par exemple, plusieurs années) de façon très précise, vous pouvez définir une valeur plus élevée pour les
jours.
Utilisez INTERVAL DAY TO SECOND comme suit :
INTERVAL DAY [(day_precision)]
TO SECOND [(fractional_seconds_precision)]
Explication de la syntaxe :
day_precision correspond au nombre de chiffres du champ
d'horodatage DAY. Les valeurs admises sont
comprises entre 0 et 9. La valeur par défaut est 2.
fractional_seconds_precision correspond au nombre de chiffres de la partie
décimale du champ d'horodatage SECOND. Les valeurs admises sont comprises entre
0 et 9. La valeur par défaut est 6.
.
Le langage SQL et l'outil iSQL 9-18
Type de données INTERVAL DAY TO SECOND (suite)
Exemple
CREATE TABLE time_example3
(day_duration INTERVAL DAY (3) TO SECOND);
INSERT INTO time_example3 (day_duration)
VALUES (INTERVAL '180' DAY(3));
SELECT sysdate + day_duration "Half Year"
FROM time_example3; --today’s date is 26-Sep-2001
Le langage SQL et l'outil iSQL 9-19
Créer une table à partir des lignes d'une autre table
Vous pouvez également créer une table en utilisant la clause AS subquery. Cette méthode permet de
créer la table et d'y insérer des lignes renvoyées par la sous-interrogation.
Explication de la syntaxe :
table désigne le nom de la table
column désigne le nom de la colonne, la valeur par défaut et la contrainte
d'intégrité
subquery désigne l'instruction SELECT qui définit le groupe de lignes à insérer
dans la nouvelle table
Règles
• La table est créée avec les noms de colonne indiqués et les lignes extraites au moyen de l'instruction
SELECT y sont insérées.
• La définition des colonnes ne peut contenir que le nom de la colonne et la valeur par défaut.
• Si des spécifications de colonne sont apportées, leur nombre doit être identique au nombre de
colonnes de la sous-interrogation SELECT.
• Si aucune spécification de colonne n'est apportée, les colonnes de la table porteront le même nom
que les colonnes de la sous-interrogation.
• Les règles d'intégrité ne sont pas transmises à la nouvelle table. Seules les définitions des types de
données des colonnes sont transmises.
Le langage SQL et l'outil iSQL 9-20
Créer une table à partir des lignes d'une autre table (suite)
L'exemple de la diapositive présente la création d'une table nommée DEPT80 qui contient des
informations concernant tous les employés du service 80. Vous remarquerez que les données destinées à
la table DEPT80 proviennent de la table EMPLOYEES.
Vous pouvez vérifier l'existence d'une table de base de données et contrôler les définitions des colonnes à
l'aide de la commande iSQL*Plus DESCRIBE.
Veillez à indiquer un alias de colonne lorsque vous sélectionnez une expression. L'alias de l'expression
SALARY*12 est ANNSAL. Si vous n'indiquez pas l'alias, l'erreur suivante est générée :
ERROR at line 3:
ORA-00998: must name this expression with a column alias
Le langage SQL et l'outil iSQL 9-21
Instruction ALTER TABLE
Vous pouvez utiliser l'instruction ALTER TABLE pour modifier la structure d'une table que vous avez
créée afin d'y ajouter une colonne absente, de changer la définition des colonnes ou de supprimer des
colonnes.
Le langage SQL et l'outil iSQL 9-22
Instruction ALTER TABLE (suite)
Vous pouvez ajouter, modifier ou supprimer des colonnes dans une table à l'aide de l'instruction ALTER
TABLE.
Explication de la syntaxe :
table désigne le nom de la table
ADD|MODIFY|DROP désigne le type de modification
column désigne le nom de la nouvelle colonne
datatype désigne le type de données et la longueur de la nouvelle colonne
DEFAULT expr indique la valeur par défaut de la nouvelle colonne
Remarque : La diapositive présente la syntaxe abrégée de l'instruction ALTER TABLE. Cette dernière est
présentée plus en détail dans un chapitre ultérieur.
Le langage SQL et l'outil iSQL 9-23
Ajouter une colonne
L'exemple de la diapositive présente l'ajout de la colonne JOB_ID à la table DEPT80. Vous remarquerez
que la nouvelle colonne est placée à la fin de la table.
Le langage SQL et l'outil iSQL 9-24
Règles relatives à l'ajout de colonnes
• Vous pouvez ajouter ou modifier des colonnes.
• Vous ne pouvez pas choisir l'emplacement de la nouvelle colonne. Celle-ci est systématiquement
placée à la fin de la table.
L'exemple de la diapositive présente l'ajout de la colonne JOB_ID à la table DEPT80. La colonne
JOB_ID est placée à la fin de la table.
Remarque : Si, lors de l'ajout d'une colonne, une table contient déjà des lignes, toutes les lignes de la
nouvelle colonne seront initialisées à NULL.
Le langage SQL et l'outil iSQL 9-25
Modifier une colonne
Vous pouvez modifier la définition d'une colonne à l'aide de l'instruction ALTER TABLE et de la clause
MODIFY. Vous pouvez par exemple modifier le type de données, la taille et la valeur par défaut d'une
colonne.
Règles
• Vous pouvez augmenter la largeur ou la précision d'une colonne numérique.
• Vous pouvez augmenter la largeur d'une colonne numérique ou alphanumérique.
• Vous pouvez réduire la largeur d'une colonne si celle-ci ne contient que des valeurs NULL ou si la
table ne contient aucune ligne.
• Vous pouvez modifier le type de données si la colonne contient des valeurs NULL.
• Vous pouvez convertir le type de données d'une colonne CHAR en VARCHAR2 ou inversement si la
colonne contient des valeurs NULL ou si vous ne modifiez pas sa taille.
• La modification de la valeur par défaut d'une colonne ne s'appliquera qu'aux insertions ultérieures
dans la table.
Le langage SQL et l'outil iSQL 9-26
Supprimer une colonne
Vous pouvez supprimer une colonne d'une table à l'aide de l'instruction ALTER TABLE et de la clause
DROP COLUMN. Cette fonction est disponible dans Oracle8i et les versions ultérieures.
Règles
• La colonne peut être vide.
• L'instruction ALTER TABLE permet de supprimer une seule colonne à la fois.
• Après modification, la table doit comporter au moins une colonne.
• Toute suppression de colonne est définitive.
Le langage SQL et l'outil iSQL 9-27
Option SET UNUSED
L'option SET UNUSED permet d'identifier une ou plusieurs colonnes comme non utilisées afin de
permettre leur suppression lorsque les ressources système sont faibles. Cette fonction est disponible dans
Oracle8i et les versions ultérieures. Lorsque vous indiquez cette clause, les colonnes cible ne sont pas
réellement supprimées de chaque ligne de la table (c'est-à-dire que l'espace disque utilisé par ces colonnes
n'est pas restauré). Le temps de réponse est donc plus rapide qu'avec la clause DROP. Les colonnes non
utilisées sont traitées comme si elles étaient supprimées, bien que leurs données soient conservées dans
les lignes de la table. Lorsqu'une colonne a été identifiée comme non utilisée, vous ne pouvez plus y
accéder. L'interrogation SELECT * ne permet par d'extraire des données de colonnes non utilisées. Par
ailleurs, l'exécution de la commande DESCRIBE ne permettra pas d'afficher le nom et le type des
colonnes identifiées comme non utilisées et vous pourrez ajouter à la table une colonne portant le même
nom qu'une colonne non utilisée. Les informations relatives à l'option SET UNUSED sont stockées dans la
vue du dictionnaire USER_UNUSED_COL_TABS.
Option DROP UNUSED COLUMNS
L'option DROP UNUSED COLUMNS permet de supprimer d'une table toutes les colonnes identifiées
comme non utilisées. Vous pouvez l'utiliser lorsque vous souhaitez disposer de l'espace disque occupé par
les colonnes non utilisées de la table. Si la table ne contient pas de colonnes non utilisées, l'instruction ne
renvoie par d'erreur.
ALTER TABLE dept80
SET UNUSED (last_name);
Table altered.
ALTER TABLE dept80
DROP UNUSED COLUMNS;
Table altered.
Le langage SQL et l'outil iSQL 9-28
Supprimer une table
L'instruction DROP TABLE supprime la définition d'une table Oracle. Lorsque vous supprimez une table,
toutes les données de la table et tous les index associés sont supprimés de la base de données.
Syntaxe
DROP TABLE table
Explication de la syntaxe :
table désigne le nom de la table
Règles
• Toutes les données sont supprimées de la table.
• Les vues et les synonymes sont conservés, mais ne sont plus valides.
• Toutes les transactions en cours sont validées.
• Seul le créateur de la table ou un utilisateur disposant du privilège DROP ANY TABLE peut
supprimer une table.
Remarque : L'instruction DROP TABLE est irréversible. Le serveur Oracle ne demande pas confirmation
lorsque vous lancez cette instruction. Si vous êtes le propriétaire de la table ou disposez d'un niveau de
privilège élevé, la table est immédiatement supprimée. Comme toutes les instructions LDD, DROP
TABLE fait l'objet d'une validation automatique.
Le langage SQL et l'outil iSQL 9-29
Renommer une table
RENAME est une instruction LDD qui permet de renommer une table, une vue, une séquence ou un
synonyme.
Syntaxe
RENAME old_name TO new_name;
Explication de la syntaxe :
old_name désigne l'ancien nom de la table, de la vue, de la séquence ou du
synonyme.
new_name désigne le nouveau nom de la table, de la vue, de la séquence ou
du synonyme.
Vous devez être propriétaire de l'objet que vous renommez.
Le langage SQL et l'outil iSQL 9-30
Vider une table
TRUNCATE TABLE est une instruction LDD irréversible qui permet de supprimer toutes les lignes d'une
table et de libérer l'espace de stockage occupé par cette table.
Syntaxe
TRUNCATE TABLE table;
Explication de la syntaxe :
table désigne le nom de la table
Vous devez être propriétaire de la table à vider ou disposer du privilège système DELETE TABLE.
L'instruction DELETE permet également de supprimer toutes les lignes d'une table, mais ne libère pas
d'espace de stockage. La suppression de lignes est plus rapide via l'instruction TRUNCATE que via
l'instruction DELETE, car :
• TRUNCATE est une instruction LDD qui ne génère pas de données d'annulation,
• lorsque vous videz une table, ses déclencheurs de suppression ne s'exécutent pas,
• si la table est le parent d'une contrainte d'intégrité référentielle, vous ne pouvez pas la vider (vous
devez désactiver la contrainte avant de lancer l'instruction TRUNCATE).
Le langage SQL et l'outil iSQL 9-31
Ajouter un commentaire à une table
L'instruction COMMENT permet d'ajouter un commentaire de 2 000 octets maximum à une colonne, une
table, une vue ou un cliché (snapshot). Le commentaire est stocké dans le dictionnaire de données et peut
être affiché dans l'une des vues suivantes du dictionnaire de données (colonne COMMENTS) :
• ALL_COL_COMMENTS
• USER_COL_COMMENTS
• ALL_TAB_COMMENTS
• USER_TAB_COMMENTS
Syntaxe
COMMENT ON TABLE table | COLUMN table.column
IS 'text';
Explication de la syntaxe :
table désigne le nom de la table
column désigne le nom de la colonne d'une table
text désigne le texte du commentaire
Vous pouvez supprimer un commentaire de la base de données en le déclarant comme chaîne vide ('') :
COMMENT ON TABLE employees IS ' ';
Le langage SQL et l'outil iSQL 9-32
Synthèse
Ce chapitre vous a permis d'apprendre à utiliser des commandes LDD pour créer, modifier, supprimer et
renommer des tables. Vous avez également appris à vider une table et à y ajouter des commentaires.
CREATE TABLE
• Crée une table.
• Crée une table à partir d'une autre table au moyen d'une sous-interrogation.
ALTER TABLE
• Modifie la structure d'une table.
• Modifie la largeur et le type de données d'une colonne et ajoute des colonnes.
DROP TABLE
• Supprime les lignes et la structure d'une table.
• Ne peut pas être annulée après exécution.
RENAME
• Renomme une table, une vue, une séquence ou un synonyme.
TRUNCATE
• Supprime toutes les lignes d'une table et libère l'espace de stockage occupé par la table.
• L'instruction DELETE permet uniquement de supprimer les lignes.
COMMENT
• Ajoute un commentaire à une table ou à une colonne.
• Interroge le dictionnaire de données pour afficher un commentaire.
Le langage SQL et l'outil iSQL 9-33
Présentation de l'exercice 9
Dans cet exercice, vous allez créer des tables à l'aide de l'instruction CREATE TABLE, puis vérifier que
cette table a été ajoutée à la base de données. Pour cela, vous allez créer la syntaxe dans le fichier de
commande, puis exécuter ce dernier pour créer la table.
Le langage SQL et l'outil iSQL 9-34
Exercice 9
1. Créez la table DEPT à partir du tableau suivant. Saisissez la syntaxe dans un script que vous
nommerez lab9_1.sql, puis exécutez l'instruction de ce script pour créer la table. Vérifiez que la
table a été créée.
Nom de colonne ID NAME
Type de clé
NULL/Unique
Table de la clé étrangère
Colonne de la clé
étrangère
Type de données NUMBER VARCHAR2
Longueur 7 25
2. Insérez les données de la table DEPARTMENT dans la table DEPT. N'utilisez que les colonnes dont
vous avez besoin.
3. Créez la table EMP à partir du tableau suivant. Saisissez la syntaxe dans un script que vous nommerez
lab9_3.sql, puis exécutez l'instruction de ce script pour créer la table. Vérifiez que la table a été
créée.
Nom de colonne ID LAST_NAME FIRST_NAME DEPT_ID
Type de clé
NULL/Unique
Table de la clé
étrangère
Colonne de la
clé étrangère
Type de données NUMBER VARCHAR2 VARCHAR2 NUMBER
Longueur 7 25 25 7
Le langage SQL et l'outil iSQL 9-35
Exercice 9 (suite)
4. Modifiez la table EMP pour permettre la saisie de noms de famille plus longs pour les employés.
Vérifiez votre modification.
5. Vérifiez que les tables DEPT et EMP sont bien enregistrées dans le dictionnaire de données
(indice : utilisez USER_TABLES).
6. Créez la table EMPLOYEES2 à partir de la structure et des données de la table EMPLOYEES.
N'incluez que les colonnes EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY et
DEPARTMENT_ID et nommez-les ID, FIRST_NAME, LAST_NAME, SALARY et DEPT_ID
respectivement dans votre nouvelle table.
7. Supprimez la table EMP.
8. Affectez le nom EMP à la table EMPLOYEES2.
9. Ajoutez aux définitions des tables DEPT et EMP un commentaire décrivant chaque table. Vérifiez
vos ajouts dans le dictionnaire de données.
10. Supprimez la colonne FIRST_NAME de la table EMP. Vérifiez votre modification en consultant
la description de la table.
11. Identifiez la colonne DEPT_ID de la table EMP comme UNUSED. Vérifiez votre modification en
consultant la description de la table.
12. Supprimez toutes les colonnes UNUSED de la table EMP. Vérifiez votre modification en
consultant la description de la table.
Le langage SQL et l'outil iSQL 9-36