IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Architecture Oracle : Les tables


précédentsommairesuivant

4. Syntaxe de l'instruction CREATE TABLE

4-1. Syntaxe 9i, 10g

Est présentée dans ce chapitre la syntaxe de l'instruction CREATE TABLE des versions Oracle 9i et 10g.

Pour obtenir des informations sur les versions antérieures, consultez la documentation officielle,
notament la syntaxe CREATE TABLE de la version Oracle 8i..





CREATE_TABLE

Image non disponible

[object_table] [XMLType_table]

relational_table

Image non disponible

[relational_properties] [physical_properties] [table_properties]

GLOBAL TEMPORARY signifie la création d'une table temporaire dont les données insérées ne persistent que le temps d'une transaction ou d'une session
schema indique le schéma utilisateur dans lequel la table sera créée. sans indication, la table est créée dans le schéma de l'utilisateur
table représente le nom de la table à créer (30 caractères maximum commençant par une lettre)
ON COMMIT DELETE ROWS indique pour une table temporaire que les données seront supprimées à la fin de la transaction
ON COMMIT PRESERVE ROWS indique pour une table temporaire que les données seront supprimées à la fin de la session



object_table

Image non disponible

[object_table_substitution] [object_properties] [OID_clause] [OID_index_clause]

OF object_type permet de créer une table d'objets de type object_type
Chaque ligne de la table contiendra une instance de cet objet et chaque instance se verra assigner un indentifiant d'objet unique (OID).
object_table_substitution spécifie que les lignes correspondant à des sous-types peuvent être insérées
OID_clause permet d'indiquer si l'identifiant d'objet unique (OID) est généré par le système (défaut) ou basé sur la clé primaire
Il n'est pas possible de spécifier OBJECT IDENTIFIER IS PRIMARY KEY si une contrainte de clé primaire n'est pas déclarée
Il n'est pas possible d'utiliser cette clause sur une table imbriquée (nested table)
OID_index_clause valide seulement pour l'option SYSTEM GENERATED et spécifie un index et éventuellement ses caractéristiques de stockage sur la colonne cachée de l'identifiant objet



XMLType_table

Image non disponible

[XMLType_storage] [XMLSchema_spec]

XMLTYPE indique que la colonne contiendra des données au format XML
XMLType_storage spécifie si la donnée XML est stockée dans une colonne objet (STORE AS OBJECT RELATIONAL) ou une colonne CLOB (STORE AS CLOB)
si l'option STORE AS OBJECT RELATIONAL est choisie, alors la clause XMLSchema_spec doit également être renseignée
XMLSchema_spec permet d'indiquer l'url d'un schéma XML enregistré (facultatif) et le nom d'un élément XML (obligatoire).
Cela permet de refuser l'insertion de données XML dont le format ne correspond pas au schéma indiqué.
Si l'url est spécifiée, le schéma XML doit avoir été préalablement enregistré à l'aide du package DBMS_XMLSCHEMA.



relational_properties

Image non disponible

[supplemental_logging_props]

column spécifie le nom de la colonne (30 caractères maximum)
datatype spécifie le type de la colonne (voir les types oracle en introduction)
DEFAULT expr indique la valeur assignée par défaut à la colonne si celle-ci n'est pas spécifiée dans l'ordre INSERT
Toute fonction SQL peut-être utilisée dans l'expression mais celle-ci ne peut pas contenir de référence à une fonction PL/SQL ou à une autre colonne, ni les pseudo-colonnes LEVEL, PRIOR et ROWNUM.
inline_constraint spécifie une contrainte de niveau colonne
inline_ref_constraint spécifie une contrainte de niveau colonne (pour les colonnes de type REF)
out_of_line_constraint spécifie une contrainte de niveau table (après la définition des colonnes)
out_of_line_ref_constraint spécifie une contrainte de niveau table (pour les colonnes de type REF)



object_table_substitution

Image non disponible

SUBSTITUTABLE AT ALL LEVELS (défaut) indique des objets correspondant à des sous-types peuvent être insérés dans la table
NOT SUBSTITUTABLE AT ALL LEVELS indique des objets correspondant à des sous-types ne peuvent pas être insérés dans la table



object_properties

Image non disponible

[supplemental_logging_props]

attribute spécifie le nom d'une colonne d' un objet



OID_clause

Image non disponible

SYSTEM GENERATED indiqe que le système attribut automatiquement le OID
PRIMARY KEY indique que l'OID est basé sur la clé primaire



OID_index_clause

Image non disponible

[physical_attributes_clause]



physical_properties

Image non disponible

[data_segment_compression] [segment_attributes_clause] [index_org_table_clause] [external_table_clause]

ORGANIZATION HEAP (défaut) pour une table standard
ORGANIZATION INDEX pour une table organisée en index (IOT)
ORGANIZATION EXTERNAL pour une table externe
CLUSTER cluster indique que la table fait partie d'un cluster de nom cluster
La liste indique les colonnes appartenant au cluster



segment_attributes_clause

Image non disponible

[physical_attributes_clause]

tablespace défini le nom du tablespace dans lequel sera créée la table. si celui ci est homis, la table sera créée dans le tablespace par défaut de l'utilisateur



physical_attributes_clause

Image non disponible

[storage_clause]

PCTUSED indique (en pourcentage) le niveau en deçà duquel le bloc sera disponible (affichage en début de freelist) pour de nouvelles insertions
PCTFREE indique (en pourcentage) l'espace que l'on souhaite conserver dans le bloc pour les mises à jour
INITRANS defini le nombre initial de transactions allouées à chaque bloc
MAXTRANS indique combien de transactions (maxi : 255) peuvent réaliser simultanément des changement dans un bloc

Si ces valeurs ne sont pas spécifiées, les valeurs par défaut sont les suivantes :

  • PCTFREE: 10
  • PCTUSED: 40
  • INITRANS: 1
  • MAXTRANS: dépendant du data block size



storage_clause

Image non disponible

Cette clause permet de fixer les paramètres de stockage.

INITIAL exprime en octets la taille du premier segment créé (en Ko si vous suffixez avec K et en Mo si vous suffixez avec M). si ce paramètre n'est pas spécifié, sa valeur par défaut est de 5 blocs (la valeur maxi dépend du système d'exploitation)
INITIAL ne peut pas être spécifié dans une instruction ALTER TABLE
NEXT exprime en octets la taille des segments suivants (en Ko si vous suffixez avec K et en Mo si vous suffixez avec M). si ce paramètre n'est pas spécifié, sa valeur par défaut est de 5 blocs (la valeur maxi dépend du système d'exploitation)
PCTINCREASE spécifie le pourcentage d'augmentation des segments ultérieurement alloués. (la valeur par defaut est de 50). si cette valeur est positionnée à 0, cela indique ques les extents auront toujours la même taille
Chaque nouvel extent créé voit sa taille initialisé à celle de l'extent précédent multiplié par le pourcentage de PCTINCREASE.
PCTINCREASE ne peut pas être spécifié sur un segment d'annulation (rollback segment).
MINEXTENTS indique le nombre minimum d'extents alloués à la création de la table (valeur minimum et par défaut : 1)
Il n'est pas possible de changer cette valeur pour un objet qui réside dans un tablespace géré localement.
MAXEXTENTS spécifie le nombre maximum d'extents pouvant être alloués sur la table (valeur minimum : 1, sauf pour un segment d'annulation dont la valeur minimum est : 2)
Il n'est pas possible de changer cette valeur pour un objet qui réside dans un tablespace géré localement.
UNLIMITED indique que l'on ne souhaite pas fixer de nombre maximum d'extents
FREELIST GROUPS spécifie le nombre de groupes de free lists (défaut et valeur minimum : 1)
Chaque groupe de free list utilise un bloc.
Si vous ne spécifiez pas une valeur suffisante pour le paramètre INITIAL pour couvrir la valeur minimum + 1 bloc pour chaque groupe de free list, Oracle augmente la valeur de INITIAL.
FREELISTS indique le nombre de free lists pour chaque groupe (valeur défaut et minimum : 1). La valeur maximum dépend de la taille du bloc et peut être obtenu en spécifiant une valeur trop grande pour ce paramètre
OPTIMAL (uniquement pour un segment d'annulation) permet de spécifier la taille optimale en octets d'un segment d'annulation. (préfixé par K pour une taille exprimée en Ko et M pour Mo)
Ce paramètre est appelé optimal dans la mesure ou Oracle essaie de maintenir cette taille en désallouant les extents non nécessaires.
NULL permet d'indiquer à Oracle de ne pas effectuer cette opération de désallocation
BUFFER_POOL permet de spécifier un tampon de cache par défaut où les blocs de l'objet seront stockés
Si vous définissez ce paramètre pour une table ou un index partitionné, alors les partitions héritent du cache de la table ou de l'index, tant qu'ils ne sont pas surchargés par une clause de niveau partition.
Pour une IOT, vous pouvez spécifier un buffer pool spécifique pour le segment d'index et le segment d'overflow.

Restrictions sur le paramètre BUFFER_POOL

  • Vous ne pouvez pas spécifier ce paramètre pour une table en cluster
  • Vous ne pouvez pas spécifier ce paramètre pour un tablespace ou un segment d'annulation

KEEP permet de charger les blocs dans le KEEP buffer pool
RECYCLE permet de charger les blocs dans le RECYCLE buffer pool
DEFAULT permet de charger les blocs dans le DEFAULT buffer pool



data_segment_compression

Image non disponible

Clause utilisée avec les tables organisées en index (IOT).
COMPRESS permet de compresser les segments de données
NOCOMPRESS interdit la compression des segments de données



table_properties

Image non disponible

[parallel_clause] [enable_disable_clause] [row_movement_clause]

CACHE permet de placer les blocs en début de LRU lus lors d'un FULL TABLE SCAN
NOCACHE permet de placer les blocs en fin de LRU lus lors d'un FULL TABLE SCAN
ROWDEPENDENCIES Cette clause permet de définir si un cluster utilise le suivi de dépendance au niveau ligne (chaque ligne contient un numéro de modification système (SCN) représentant un temps supérieur ou égal au dernier enregistrement (commit) qui a modifié la ligne. ce réglage ne peut pas être modifié une fois que le cluster est créé)
ROWDEPENDENCIES indique que le tracking est activé
NOROWDEPENDENCIES indique que le traking n'est pas activé
MONITORING permet d'activer la collecte de statistiques (non applicable sur une table temporaire)
NOMONITORING (défaut) n'active pas la collecte de statistiques (non applicable sur une table temporaire)



column_properties

Image non disponible

[nested_table_col_properties] [varray_col_properties] [LOB_storage_clause] [LOB_partition_storage]



object_type_col_properties

Image non disponible



substitutable_column_clause

Image non disponible

Cette clause indique qu'une colonne objet ou un attribut de la même hiérarchie sont subsituables.



nested_table_col_properties

Image non disponible

NESTED TABLE cette clause (obligatoire lors de la création d'une table contenant une ou plusieurs colonnes contenant des tables imbriquées) permet de définir les informations de stockage propres à ce type de colonne
nested_item indique le nom de la colonne de type table imbriquée (nested table)
COLUMN_VALUE indique le nom de la sous-table imbriquée ou du sous-varray contenu dans une autre table imbriquée (collection multiniveaux)
storage table indique le nom de la table dans laquelle la collection sera stockée
RETURN AS indique le type de résultat retourné lors d'une interrogation
VALUE retourne une copie de la collection
LOCATOR retourne un pointeur vers la collection



varray_col_properties

Image non disponible

Cette clause permet de spécifier les informations de stockage du LOB dans lequel le varray sera stocké.

Si la clause STORE AS LOB est spécifiée, 2 cas sont possibles :

  • La taille maximum du varray est inférieure à 4000 octets et le stockage en ligne n'est pas désactivé, alors le tableau sera stocké en ligne (dans la table)
  • La taille maximum du varray est supérieure à 4000 ou le stockage en ligne est désactivé, alors le tableau sera stocké en dehors de la table

Si elle n'est pas spécifiée, 2 cas sont possibles :

  • La taille maximum du varray est inférieure à 4000 octets, le tableau sera stocké en ligne (dans une colonne de type RAW)
  • La taille maximum du varray est supérieure à 4000 octets, le tableau sera stocké hors ligne (BLOB hors de la table)

Il n'est pas possible de spécifier le tablespace dans les infos de paramètrage du LOB (Le LOB est créé dans le même tablespace que la table principale).



LOB_storage_clause

Image non disponible

Cette clause permet de spécifier les paramètres de stockage d'une ou plusieurs colonnes LOB.
Si elle n'est pas spécifiée, Oracle génère un nom pour chaque colonne de type SYS_LOB_Pn pour la partie data du LOB (ou n est un numéro généré automatiquement) ou SYS_IL_Pn pour l'index du LOB
et SYS_LOB_SUBPn et SYS_IL_SUBPn pour des LOB de sous-partitions.

LOB_item spécifie la colonne ou l'attribut objet LOB sur lequel vous souhaitez définir le tablespace et les informations de stockage
LOB_segname spécifie le nom du segment (interdit si vous spécifiez plus d'une colonne LOB)
LOB_parameters permet de spécifier toutes les informations de stockage



LOB_parameters

Image non disponible

[logging_clause]

tablespace est le nom du tablespace dans lequel sera stocké le LOB
ENABLE STORAGE IN ROW permet de stocker le contenu du LOB dans une colonne de type RAW de la table (si sa taille est inférieure à 4000 octets - les infos de contrôle)
Cette clause ne peut pas être utilisée pour une table organisée en index à moins que la partie OVERFLOW ait été spécifiée.
DISABLE STORAGE IN ROW indique que le LOB sera stocké en dehors de la table
La clause STORAGE IN RAW ne peut plus être modifiée, sauf si la table est déplacée (move).
CHUNK integer spécifie le nombre d'octets a allouer pour la manipulation du LOB
La valeur maximale pour integer est 32768 (taille de bloc maximale possible sous Oracle).
Si integer n'est pas un multiple du data block size, il est arrondi au data block size supérieur.
(Si le data block size actuel est de 2048 et vous spécifiez 3000, alors integer est arrondi à 4096)
Une fois définie, cette valeur ne plus être modifiée.
Elle ne peut pas non plus excéder la valeur du paramètre NEXT défini dans la clause de stockage.
PCTVERSION integer indique le pourcentage maximum (défaut 10) d'espace utilisé pour maintenir les anciennes versions du LOB
En clair, une ancienne version du LOB ne sera pas écrasée tant qu'elle ne consommera que integer% de l'espace.
Cette clause peut être spécifiée si la base tourne en manual ou automatic undo mode.
PCTVERSION est par défaut en manual undo mode et RETENTION est par défaut en automatic undo mode
RETENTION indique que l'on souhaite conserver les anciennes versions du LOB. Oracle utilise la valeur du paramètre UNDO_RETENTION pour déterminer la valeur (en temps) des données non enregistrées à conserver dans la base
Vous ne pouvez pas spécifier PCTVERSION et RETENTION en même temps.
FREEPOOLS integer indique le nombre de groupes de freelist pour le segment LOB. Normalement integer doit correspondre au nombre d'instances en environnement Real Application Clusters et à 1 pour une base constituée d'une seule instance
Cette clause ne peut être spécifiée que si la base tourne en automatic undo mode.
Vous ne pouvez pas spécifier à la fois FREEPOOLS et le paramètre FREELIST GROUPS de la clause de stockage.
CACHE indique que vous souhaitez conserver les blocs lus en mémoire
NOCACHE spécifie que vous ne souhaitez pas conserver les blocs lus en mémoire
CACHE READS indique que seuls les blocs lus sont placés en cache (et non les blocs écrits)



logging_clause

Image non disponible

Cette clause indique si la création de la table, d'une partition, d'une définition de stockage d'un LOB seront inscrits dans les redo log files (LOGGING) ou non (NOLOGGING).
Elle indique également si les opérations d'insertions (direct-path) depuis SQL*Loader seront inscrites dans les redo log files.



LOB_partition_storage

Image non disponible

[LOB_storage_clause] [varray_col_properties]

Cette clause permet de définir les informations de stockage des LOB d'une table partitionnée.



XMLType_column_properties

Image non disponible

Permet de définir les informations de stockage d'une colonne de type XML.



XMLType_storage

Image non disponible

Une colonne de type XML peut être stockée dans un LOB ou dan un objet.
STORE AS OBJECT RELATIONAL indique de stocker le type XML dans une colonne objet (vous devez alors également spécifier la clause XMLSchema_spec)
STORE AS CLOB indique que la donnée au format XML sera stockée dans un CLOB (dans ce cas vous spécifierez la clause LOB_parameters ou la clause XMLSchema_spec mais pas les deux)



XMLSchema_spec

Image non disponible

Permet de spécifier l'url d'un schéma XML enregistré (via le package DBMS_XMLSCHEMA) et (obligatoire) le nom d'un élément XML.



row_movement_clause

Image non disponible

Cette clause permet de définir si une ligne d'une table pourra être déplacée (à l'occasion d'une compression de segment ou d'une mise à jour).
Le déplacement de la ligne impliquant une modification du ROWID.
ENABLE ROW MOVEMENT autorise le déplacement d'une ligne
DISABLE ROW MOVEMENT (défaut) interdit le déplacement d'une ligne
Cette clause n'est pas utilisable avec une IOT non partitionnée.



index_org_table_clause

Image non disponible

[mapping_table_clause] [key_compression] [index_org_overflow_clause]

Cette clause est utilisée dans la création d'une table organisée en index.
PCTTHRESHOLD integer représente le pourcentage d'espace d'un bloc d'index réservé au stockage d'une ligne
Il doit être suffisant pour stocker la clé primaire.
Toutes les colonnes qui ne rentrent pas dans cet espace sont placées dans une zone de débordement.
integer doit être compris entre 1 et 50 (défaut)
PCTTHRESHOLD ne peut pas être utilisé sur une partition individuelle d'une IOT



mapping_table_clause

Image non disponible

Utilisez cette clause pour stocker les ROWID dans une table relationnelle. cette table sera nécessaire pour créer un index bitmap sur l'IOT.



key_compression

Image non disponible

Cette clause permet d'activer la compression de clé sur l'IOT.
COMPRESS active la compression de la clé primaire
COMPRESS integer active la compression avec les integer premières colonnes de la clé primaire
NOCOMPRESS (défaut) interdit la compression de la clé primaire
Au niveau partition, la clause COMPRESS n'accepte pas le paramètre integer.



index_org_overflow_clause

Image non disponible

[segment_attributes_clause]

Cette clause permet de définir la zone de débordement d'une IOT dans laquelle seront placées les colonnes qui dépassent la valeur de PCTTHRESHOLD.
Lors de la création de l'IOT, Oracle évalue la taille maximum d'une ligne. si celle-ci ne tient pas dans le pourcentage PCTTHRESHOLD et que vous n'avez pas défini de zone d'overflow, Oracle génère une erreur.
Tous les attributs physiques et les clauses de stockage définis après le mot clé OVERFLOW s'appliquent donc aux colonnes placées dans la zone de débordement.
Si la table contient des colonnes LOB, celles-ci seront stockées en dehors de la table, même si la clause OVERFLOW est spécifiée.
INCLUDING column_name indique à partir de quelle colonne les données seront stockées dans la zone de débordement



supplemental_logging_props

Image non disponible

[supplemental_log_grp_clause]

Cette clause indique à Oracle d'ajouter des informations dans le flot des logs pour le support des outils basés sur les logs.



external_table_clause

Image non disponible

TYPE access_driver_type indique le pilote d'accès à utiliser. Par défaut il s'agit de ORACLE_LOADER
REJECT LIMIT indique le nombre d'erreurs de conversion permises lors de la lecture de la table externe avant d'annuler le processus (par défaut 0)



external_data_properties

Image non disponible

directory spécifie le nom du répertoire dans lequel se trouvent les fichiers source
ACCESS PARAMETERS permet de décrire la structure du fichier externe (dans le cas du driver générique Oracle, cette syntaxe se rapproche beaucoup d'un fichier de description Sql*Loader)
LOCATION indique la liste des fichiers externes à lire



table_partitioning_clause

Image non disponible

[hash_partitioning] [list_partitioning] [composite_partitioning]

range_partitioning utilisez cette clause pour créer des partitions par tranches de valeurs
hash_partitioning utilisez cette clause pour laisser Oracle définir l'algorithme de découpage
list_partitioning utilisez cette clause pour créer des partitions définies sur une liste de valeurs
composite_partitioning utilisez cette clause pour créer des partitions par tranches, elles-même partitionnées par hash ou par liste



range_partitioning

Image non disponible

[range_values_clause] [table_partition_description]

column indique la ou les colonnes sur lesquelles s'appliquent le découpage (a l'exception des colonnes de type ROWID, LONG, LOB, ou TIMESTAMP WITH TIME ZONE)
partition permet d'indiquer le nom de la partition (par défaut SYS_Pn)
range_value_clause indique la valeur maximum (non incluse) de column pour appartenir à la partition. Le mot clé MAXVALUE peut être substitué pour indiquer la valeur maximum (normalement pour la dernière partition)
table_partition_description permet de définir les caractéristiques de stockage, attributs de segment, de compression



hash_partitioning

Image non disponible

[individual_hash_partitions] [hash_partitions_by_quantity]

column indique la ou les colonnes sur lesquelles s'appliquent le découpage
individual_hash_partitions permet de nommer chaque partition
hash_partitions_by_quantity permet de définir simplement le nombre de partitions que l'on veut créer



list_partitioning

Image non disponible

[list_values_clause] [table_partition_description]

column indique la colonne (et une seule) sur laquelle s'applique le découpage (a l'exception des colonnes de type LOB)
list_values_clause détermine la liste des valeurs (au moins une valeur doit être définie) appartenant à la partition (DEFAUT peut être substitué pour représenter toutes les autres valeurs)
Une partition par liste ne peut pas être sous-partitionnée.
Si la colonne est de type objet, alors vous ne pouvez partitionner que sur un seul attribut de la colonne.
Chaque valeur déterminée dans les listes doit être unique.
Une IOT ne peut pas être partitionnée par liste.



composite_partitioning

Image non disponible

[subpartition_by_list] [subpartition_by_hash] [range_values_clause]

Cette clause permet de subdiviser une partition par tranche (range) en sous-partitions par hash ou par liste.
Elle n'est pas permise avec les tables organisées en index.



subpartition_by_hash

Image non disponible

[subpartition_template]

Cette clause permet de subdiviser une partition en sous-partitions par hash qui peuvent être définies à partir d'un modèle (template) ou d'une quantité.
SUBPARTITIONS quantity indique le nombre de sous-partitions voulues (par défaut 1) pour chaque partition ainsi que le (les) tablespace(s) dans lesquels elles seront stockées



individual_hash_partitions

Image non disponible

[partitioning_storage_clause]

Cette clause permet de nommer chaque partition et d'en indiquer le tablespace de stockage.
En absence de cette clause, Oracle nomme les partitions sous la forme SYS_Pn ou n est un numéro généré automatiquement.



hash_partitions_by_quantity

Image non disponible



Cette clause permet de définir le nombre de partitions ainsi que les tablespaces de stockage.
La clause OVERFLOW permet d'indiquer une liste de tablespaces où seront stockées les zones de débordement d'une IOT.



subpartition_by_list

Image non disponible

[subpartition_template]

Permet de définir des sous-partitions définies par une liste de valeurs extraite des colonnes indiquées.



subpartition_template

Image non disponible

[list_values_clause] [partitioning_storage_clause]

Cette clause permet d'appliquer un schéma de sous-partitionnement d'une partition.
Ce schéma peut contenir soit un partitionnement par hash, soit un partitionnement par liste.
Il sera appliqué par défaut pour chaque partition pour laquelle les sous-partitions ne seront pas définies explicitement.
Lorsqu'une sous-partition est définie par un modèle, vous devez spécifier un nom pour chacune d'entre-elles.
La seule clause de la section partitioning_storage_clause que vous pouvez spécifier est la clause TABLESPACE.
Si la clause TABLESPACE est spécifiée pour une sous-partition de type LOB, vous devez spécifier la clause TABLESPACE pour chaque sous-partitions de cette colonne LOB.



range_values_clause

Image non disponible

Permet de spécifier, pour chaque partition, la plus grande valeur non incluse de la colonne.
Les valeurs données pour chaque partition doivent être ordonnées de la plus petite à la plus grande.
La valeur indiquée peut être MAXVALUE et doit, dans ce cas, être la dernière série.

exemple : partitionnement d'une table contenant des départements :
1ère partition : PARTITION_01_29 VALUES LESS THAN (30) (pour stocker les départements de 01 à 29)
2ème partition : PARTITION_30_59 VALUES LESS THAN (60) (pour stocker les départements de 30 à 59)
3ème partition : PARTITION_60_99 VALUES LESS THAN (MAXVALUE) (pour stocker les départements supérieurs à 59)



table_partition_description

Image non disponible

[segment_attributes_clause] [key_compression] [LOB_storage_clause] [varray_col_properties] [partition_level_subpartition]

Cette clause permet de définir les caractéristiques de stockage d'une partition.
LOB_storage_clause permet de définir les caractéristiques de stockage des colonnes LOB de chaque partition
varray_col_properties permet de définir les caractéristiques de stockage pour les colonnes varray de la partition
La clause partition_level_subpartition ne peut être utilisée que sur des partitionnements composites.



partition_level_subpartitions

Image non disponible

[subpartition_spec]

Cette clause n'est permise que sur les partitions composites.
Elle écrase les réglages par défaut définis dans la clause subpartition_by_hash (pour les partitions composites de type range-hash) ou dans le modèle (template) de sous-partitionnement (pour les partitions composites de type range-hash ou range-list).

Spécificités pour tous types de partitions composites :
Vous pouvez spécifier un nombre de partitions désiré, auquel cas, Oracle assigne un nom automatiquement à chaque partition.
Vous pouvez spécifier une liste de TABLESPACEs dans lesquelles seront stockées les différentes partitions.
Vous pouvez utiliser la clause subpartition_spec pour nommer explicitement chaque partition.
Si la clause partition_level_subpartition est omise et que vous avez créé un modèle de sous-partitionnement, Oracle utilisera ce modèle.
Avec la clause partition_spec, seule la clause TABLESPACE peut être définie à l'intérieur de la clause partitioning_storage_clause.

Spécificité pour le type de partition composite range-hash
La clause list_values_clause de subpartition_spec est invalide.

Spécificité pour le type de partition composite range-list
La clause hash_subpartition_quantity n'est pas autorisée.
Dans la clause subpartition_spec vous devez spécifier la clause list_values_clause pour chaque sous-partition, et les valeurs indiquées doivent être unique dans toutes les sous-partitions d'une même partition.



subpartition_spec

Image non disponible

[list_values_clause] [partitioning_storage_clause]

Spécification des partitions, de leur plages de valeurs et de leur caractéristiques de stockage.



partitioning_storage_clause

Image non disponible

Permet de définir le tablespace dans lequel sera stockée la partition ainsi que la zone d'overflow pour une IOT.
Indique également les caractéristiques de stockage des colonnes de type LOB ou de type varray des partitions.



parallel_clause

Image non disponible

Permet de régler les paramètres de parallélisme lors d'une création de table, ainsi que lors d'opérations du DML (Insert, Update, Delete, Merge).
NOPARALLEL (défaut) spécifie qu'aucun mécanisme de parallélisme n'est demandé
PARALLEL indique que l'on souhaite activer le mode parallèle avec un degré équivalent au nombre de processeurs disponibles
PARALLEL integer indique que l'on active le parallélisme avec un degré égal à integer (nombre de threads mis en oeuvre dans l'opération)
Le traitement en parallèle est désactivé pour une table contenant un trigger ou une contrainte d'intégrité référentielle.
En présence d'un index bitmap sur la table, le parallélisme est désactivé si la table n'est pas partitionnée.
Si la table contient des colonnes de type LOB ou de type objet, les ordre insert, update ou delete qui modifient ce LOB ou cet objet ne seront pas traités en parallèle.
Un indicateur (hint) parallel surcharge la clause PARALLEL définie au niveau de la table.
Si un ordre DML ou CREATE TABLE ... AS SELECT référence un objet présent dans une autre base, le parallélisme n'est pas activé.



enable_disable_clause

Image non disponible

[using_index_clause] [exceptions_clause]

Cette clause permet de définir à la création de la table l'état dans lequel sont créées les contraintes.
ENABLE indique que la contrainte est activée
ENABLE VALIDATE indique que les données pré-existantes dans la table doivent respecter les contraintes
Si une donnée dans la table viole la contrainte, celle-ci reste à l'état DISABLE et Oracle retourne une erreur.
ENABLE NOVALIDATE n'effectue aucun contrôle sur les données pré-existantes, mais seulement sur les données insérées utltérieurement
VALIDATE est la valeur par défaut si aucune n'est spécifiée
Il n'est pas possible d'activer une clé étrangère qui référence une clé primaire ou unique désactivée.
DISABLE permet de désactiver la contrainte
DISABLE VALIDATE désactive la contrainte et supprime son index mais la laisse dans un état valide
DISABLE NOVALIDATE (défaut) désactive la contrainte
Si vous désactivez une contrainte de type primary key ou unique, Oracle supprime l'index associé.



using_index_clause

Image non disponible

Cette clause ne s'applique qu'aux contraintes de type PRIMARY KEY ou UNIQUE.
index indique que l'on souhaite utiliser l'index existant index pour valider la contrainte
create_index_statement permet de définir en ligne un ordre de création d'index
SORT indique que l'index devra être trié dans l'ordre croissant
NOSORT indique qu'aucun tri ne sera appliqué à l'index



global_partitioned_index

Image non disponible

[index_partitioning_clause]

Permet de définir le partitionnement d'un index.



index_partitioning_clause

Image non disponible

[segment_attributes_clause]

Cette clause permet de définir les particularités de chaque partition d'index.

4-2. Exemples de création de tables

 
Sélectionnez
CREATE TABLE employees_demo
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25) 
         CONSTRAINT emp_last_name_nn NOT NULL
    , email          VARCHAR2(25) 
         CONSTRAINT emp_email_nn     NOT NULL
    , phone_number   VARCHAR2(20)
    , hire_date      DATE  DEFAULT SYSDATE 
         CONSTRAINT emp_hire_date_nn  NOT NULL
    , job_id         VARCHAR2(10)
       CONSTRAINT     emp_job_nn  NOT NULL
    , salary         NUMBER(8,2)
       CONSTRAINT     emp_salary_nn  NOT NULL
    , commission_pct NUMBER(2,2)
    , manager_id     NUMBER(6)
    , department_id  NUMBER(4)
    , dn             VARCHAR2(300)
    , CONSTRAINT     emp_salary_min
                     CHECK (salary > 0) 
    , CONSTRAINT     emp_email_uk
                     UNIQUE (email)
    ) ;
Indications de stockage
Sélectionnez
CREATE TABLE employees_demo
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25) 
         CONSTRAINT emp_last_name_nn NOT NULL
    , email          VARCHAR2(25) 
         CONSTRAINT emp_email_nn     NOT NULL
    , phone_number   VARCHAR2(20)
    , hire_date      DATE  DEFAULT SYSDATE 
         CONSTRAINT emp_hire_date_nn  NOT NULL
    , job_id         VARCHAR2(10)
       CONSTRAINT     emp_job_nn  NOT NULL
    , salary         NUMBER(8,2)
       CONSTRAINT     emp_salary_nn  NOT NULL
    , commission_pct NUMBER(2,2)
    , manager_id     NUMBER(6)
    , department_id  NUMBER(4)
    , dn             VARCHAR2(300)
    , CONSTRAINT     emp_salary_min
                     CHECK (salary > 0) 
    , CONSTRAINT     emp_email_uk
                     UNIQUE (email)
    ) 
   TABLESPACE example 
   STORAGE (INITIAL     6144  
            NEXT        6144 
            MINEXTENTS     1  
            MAXEXTENTS     5 );
Table temporaire avec persistence des données sur toute la session
Sélectionnez
CREATE GLOBAL TEMPORARY TABLE today_sales
   ON COMMIT PRESERVE ROWS 
   AS SELECT * FROM orders WHERE order_date = SYSDATE;
Table d'objets
Sélectionnez
CREATE TABLE persons OF person_t;
Table contenant une colonne objet
Sélectionnez
CREATE TABLE books (title VARCHAR2(100), author person_t);
Mise en oeuvre du parallélisme
Sélectionnez
CREATE TABLE dept_80
   PARALLEL
   AS SELECT * FROM employees
   WHERE department_id = 80;
Contrainte non activée
Sélectionnez
CREATE TABLE departments_demo
    ( department_id    NUMBER(4)   PRIMARY KEY DISABLE
    , department_name  VARCHAR2(30)
           CONSTRAINT  dept_name_nn  NOT NULL
    , manager_id       NUMBER(6)
    , location_id      NUMBER(4)
    , dn               VARCHAR2(300)
    ) ;
Table contenant une colonne de type table imbriquée (nested table)
Sélectionnez
CREATE TABLE print_media
    ( product_id        NUMBER(6)
    , ad_id             NUMBER(6)
    , ad_composite      BLOB
    , ad_sourcetext     CLOB
    , ad_finaltext      CLOB
    , ad_fltextn        NCLOB
    , ad_textdocs_ntab  textdoc_tab
    , ad_photo          BLOB
    , ad_graphic        BFILE
    , ad_header         adheader_typ
    , press_release     LONG
    ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab;
Table contenant des collections multi-niveaux
Sélectionnez
CREATE TYPE phone AS OBJECT (telephone NUMBER);
/
CREATE TYPE phone_list AS TABLE OF phone;
/
CREATE TYPE my_customer AS OBJECT (
   cust_name VARCHAR2(25),
   phones phone_list);
/
CREATE TYPE customer_list AS TABLE OF my_customer;
/
CREATE TABLE business_contacts (
   company_name VARCHAR2(25),
   company_reps customer_list)
   NESTED TABLE company_reps STORE AS outer_ntab
   (NESTED TABLE phones STORE AS inner_ntab);
Table contenant des colonnes LOB
Sélectionnez
CREATE TABLE print_media_new
    ( product_id        NUMBER(6)
    , ad_id             NUMBER(6)
    , ad_composite      BLOB
    , ad_sourcetext     CLOB
    , ad_finaltext      CLOB
    , ad_fltextn        NCLOB
    , ad_textdocs_ntab  textdoc_tab
    , ad_photo          BLOB
    , ad_graphic        BFILE
    , ad_header         adheader_typ
    , press_release     LONG
    ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab_new
    LOB (ad_sourcetext, ad_finaltext) STORE AS
      (TABLESPACE example
       STORAGE (INITIAL 6144 NEXT 6144)
       CHUNK 4000
       NOCACHE LOGGING);
Table organisée en index
Sélectionnez
CREATE TABLE countries 
    ( country_id      CHAR(2)
      CONSTRAINT country_id_nn NOT NULL
    , country_name    VARCHAR2(40)
    , currency_name   VARCHAR2(25)
    , currency_symbol VARCHAR2(3)
    , region          VARCHAR2(15)
    , CONSTRAINT    country_c_id_pk
                    PRIMARY KEY (country_id ) 
    ORGANIZATION INDEX 
    INCLUDING   country_name 
    PCTTHRESHOLD 2 
    STORAGE 
     ( INITIAL  4K 
      NEXT  2K 
      PCTINCREASE 0 
      MINEXTENTS 1 
      MAXEXTENTS 1 ) 
   OVERFLOW 
    STORAGE 
      ( INITIAL  4K 
        NEXT  2K 
        PCTINCREASE 0 
        MINEXTENTS 1 
        MAXEXTENTS 1 );
Table externe
Sélectionnez
CREATE TABLE dept_external (
   deptno     NUMBER(6),
   dname      VARCHAR2(20),
   loc        VARCHAR2(25) 
)
ORGANIZATION EXTERNAL
(TYPE oracle_loader
 DEFAULT DIRECTORY admin
 ACCESS PARAMETERS
 (
 RECORDS DELIMITED BY newline
 BADFILE 'ulcase1.bad'
 DISCARDFILE 'ulcase1.dis'
 LOGFILE 'ulcase1.log'
 SKIP 20
 FIELDS TERMINATED BY ","  OPTIONALLY ENCLOSED BY '"'
 (
 deptno     INTEGER EXTERNAL(6),
 dname      CHAR(20),
 loc        CHAR(25)
  )
 )
 LOCATION ('ulcase1.ctl')
)
REJECT LIMIT UNLIMITED;
Table XML dont les données sont stockées dans une colonne LOB
Sélectionnez
CREATE TABLE xwarehouses OF XMLTYPE;
Table XML utilisant un schéma enregistré
Sélectionnez
CREATE TABLE xwarehouses OF XMLTYPE
   XMLSCHEMA "http://www.oracle.com/xwarehouses.xsd"
   ELEMENT "Warehouse";
Table XML dont les données sont stockées dans un objet relationnel
Sélectionnez
CREATE TABLE xwarehouses (
   warehouse_id    NUMBER,
   warehouse_spec  XMLTYPE)
   XMLTYPE warehouse_spec STORE AS OBJECT RELATIONAL
      XMLSCHEMA "http://www.oracle.com/xwarehouses.xsd"
      ELEMENT "Warehouse";
Table partitionnée par tranches
Sélectionnez
CREATE TABLE range_sales
    ( prod_id        NUMBER(6)
    , cust_id        NUMBER
    , time_id        DATE
    , channel_id     CHAR(1)
    , promo_id       NUMBER(6)
    , quantity_sold  NUMBER(3)
    , amount_sold         NUMBER(10,2)
    ) 
PARTITION BY RANGE (time_id)
  (PARTITION SALES_Q1_1998 VALUES LESS THAN (TO_DATE('01-APR-1998','DD-MON-YYYY')),
   PARTITION SALES_Q2_1998 VALUES LESS THAN (TO_DATE('01-JUL-1998','DD-MON-YYYY')),
   PARTITION SALES_Q3_1998 VALUES LESS THAN (TO_DATE('01-OCT-1998','DD-MON-YYYY')),
   PARTITION SALES_Q4_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')),
   PARTITION SALES_Q1_1999 VALUES LESS THAN (TO_DATE('01-APR-1999','DD-MON-YYYY')),
   PARTITION SALES_Q2_1999 VALUES LESS THAN (TO_DATE('01-JUL-1999','DD-MON-YYYY')),
   PARTITION SALES_Q3_1999 VALUES LESS THAN (TO_DATE('01-OCT-1999','DD-MON-YYYY')),
   PARTITION SALES_Q4_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')),
   PARTITION SALES_Q1_2000 VALUES LESS THAN (TO_DATE('01-APR-2000','DD-MON-YYYY')),
   PARTITION SALES_Q2_2000 VALUES LESS THAN (TO_DATE('01-JUL-2000','DD-MON-YYYY')),
   PARTITION SALES_Q3_2000 VALUES LESS THAN (TO_DATE('01-OCT-2000','DD-MON-YYYY')),
   PARTITION SALES_Q4_2000 VALUES LESS THAN (MAXVALUE))
;
Table partitionnée par listes
Sélectionnez
CREATE TABLE list_customers 
   ( customer_id             NUMBER(6)
   , cust_first_name         VARCHAR2(20) 
   , cust_last_name          VARCHAR2(20)
   , cust_address            CUST_ADDRESS_TYP
   , nls_territory           VARCHAR2(30)
   , cust_email              VARCHAR2(30))
   PARTITION BY LIST (nls_territory) (
   PARTITION asia VALUES ('CHINA', 'THAILAND'),
   PARTITION europe VALUES ('GERMANY', 'ITALY', 'SWITZERLAND'),
   PARTITION west VALUES ('AMERICA'),
   PARTITION east VALUES ('INDIA'),
   PARTITION rest VALUES (DEFAULT));
Table partitionnée par hash
Sélectionnez
CREATE TABLE hash_products 
    ( product_id          NUMBER(6) 
    , product_name        VARCHAR2(50) 
    , product_description VARCHAR2(2000) 
    , category_id         NUMBER(2) 
    , weight_class        NUMBER(1) 
    , warranty_period     INTERVAL YEAR TO MONTH 
    , supplier_id         NUMBER(6) 
    , product_status      VARCHAR2(20) 
    , list_price          NUMBER(8,2) 
    , min_price           NUMBER(8,2) 
    , catalog_url         VARCHAR2(50) 
    , CONSTRAINT          product_status_lov 
                          CHECK (product_status in ('orderable' 
                                                  ,'planned' 
                                                  ,'under development' 
                                                  ,'obsolete') 
 ) ) 
 PARTITION BY HASH (product_id) 
 PARTITIONS 6
 STORE IN (tbs_1, tbs_2, tbs_3, tbs_4);
Table partitionnée contenant des colonnes LOB
Sélectionnez
CREATE TABLE print_media_demo
   ( product_id NUMBER(6)
   , ad_id NUMBER(6)
   , ad_composite BLOB
   , ad_sourcetext CLOB
   , ad_finaltext CLOB
   , ad_fltextn NCLOB
   , ad_textdocs_ntab textdoc_tab
   , ad_photo BLOB
   , ad_graphic BFILE
   , ad_header adheader_typ
   ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab_demo
      LOB (ad_composite, ad_photo, ad_finaltext)
      STORE AS(STORAGE (NEXT 20M))
   PARTITION BY RANGE (product_id)
      (PARTITION p1 VALUES LESS THAN (3000) TABLESPACE tbs_1
         LOB (ad_composite, ad_photo)
         STORE AS (TABLESPACE tbs_2 STORAGE (INITIAL 10M)),
       PARTITION P2 VALUES LESS THAN (MAXVALUE)
         LOB (ad_composite, ad_finaltext)
         STORE AS (TABLESPACE tbs_3)
       )
   TABLESPACE tbs_4;
Table à partitions composites
Sélectionnez
CREATE TABLE composite_sales
    ( prod_id        NUMBER(6)
    , cust_id        NUMBER
    , time_id        DATE
    , channel_id     CHAR(1)
    , promo_id       NUMBER(6)
    , quantity_sold  NUMBER(3)
    , amount_sold         NUMBER(10,2)
    ) 
PARTITION BY RANGE (time_id)
SUBPARTITION BY HASH (channel_id)
  (PARTITION SALES_Q1_1998 VALUES LESS THAN (TO_DATE('01-APR-1998','DD-MON-YYYY')),
   PARTITION SALES_Q2_1998 VALUES LESS THAN (TO_DATE('01-JUL-1998','DD-MON-YYYY')),
   PARTITION SALES_Q3_1998 VALUES LESS THAN (TO_DATE('01-OCT-1998','DD-MON-YYYY')),
   PARTITION SALES_Q4_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')),
   PARTITION SALES_Q1_1999 VALUES LESS THAN (TO_DATE('01-APR-1999','DD-MON-YYYY')),
   PARTITION SALES_Q2_1999 VALUES LESS THAN (TO_DATE('01-JUL-1999','DD-MON-YYYY')),
   PARTITION SALES_Q3_1999 VALUES LESS THAN (TO_DATE('01-OCT-1999','DD-MON-YYYY')),
   PARTITION SALES_Q4_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')),
   PARTITION SALES_Q1_2000 VALUES LESS THAN (TO_DATE('01-APR-2000','DD-MON-YYYY')),
   PARTITION SALES_Q2_2000 VALUES LESS THAN (TO_DATE('01-JUL-2000','DD-MON-YYYY'))
      SUBPARTITIONS 8,
   PARTITION SALES_Q3_2000 VALUES LESS THAN (TO_DATE('01-OCT-2000','DD-MON-YYYY'))
     (SUBPARTITION ch_c,
      SUBPARTITION ch_i,
      SUBPARTITION ch_p,
      SUBPARTITION ch_s,
      SUBPARTITION ch_t),
   PARTITION SALES_Q4_2000 VALUES LESS THAN (MAXVALUE)
      SUBPARTITIONS 4)
;
Partitionnement composite avec utilisation d'un modèle
Sélectionnez
CREATE TABLE customers_part (
   customer_id        NUMBER(6),
   cust_first_name    VARCHAR2(20),
   cust_last_name     VARCHAR2(20),
   nls_territory      VARCHAR2(30),
   credit_limit       NUMBER(9,2)) 
   PARTITION BY RANGE (credit_limit)
   SUBPARTITION BY LIST (nls_territory)
      SUBPARTITION TEMPLATE 
         (SUBPARTITION east  VALUES 
            ('CHINA', 'JAPAN', 'INDIA', 'THAILAND'),
          SUBPARTITION west VALUES 
             ('AMERICA', 'GERMANY', 'ITALY', 'SWITZERLAND'),
          SUBPARTITION other VALUES (DEFAULT))
      (PARTITION p1 VALUES LESS THAN (1000),
       PARTITION p2 VALUES LESS THAN (2500),
       PARTITION p3 VALUES LESS THAN (MAXVALUE));
Table contenant une colonne objet référencée
Sélectionnez
CREATE TABLE employees_obj
   ( e_name   VARCHAR2(100),
     e_number NUMBER,
     e_dept   REF department_typ SCOPE IS departments_obj_t );
Table contenant une colonne objet référencée avec contrainte d'intégrité
Sélectionnez
CREATE TABLE employees_obj
   ( e_name   VARCHAR2(100),
     e_number NUMBER,
     e_dept   REF department_typ REFERENCES departments_obj_t);
Table d'objets avec OID basé sur la clé primaire
Sélectionnez
CREATE TYPE employees_typ AS OBJECT 
   (e_no NUMBER, e_address CHAR(30));

CREATE TABLE employees_obj_t OF employees_typ (e_no PRIMARY KEY)
   OBJECT IDENTIFIER IS PRIMARY KEY;
Table d'objets munis de contraintes
Sélectionnez
CREATE TYPE address_t AS OBJECT
  ( hno    NUMBER,
    street VARCHAR2(40),
    city   VARCHAR2(20),
    zip    VARCHAR2(5),
    phone  VARCHAR2(10) );

CREATE TYPE person AS OBJECT
  ( name        VARCHAR2(40),
    dateofbirth DATE,
    homeaddress address,
    manager     REF person );

CREATE TABLE persons OF person
  ( homeaddress NOT NULL,
      UNIQUE (homeaddress.phone),
      CHECK (homeaddress.zip IS NOT NULL),
      CHECK (homeaddress.city <> 'San Francisco') );
Contrainte en ligne
Sélectionnez
CREATE TABLE locations_demo
    ( location_id    NUMBER(4) CONSTRAINT loc_id_pk PRIMARY KEY
    , street_address VARCHAR2(40)
    , postal_code    VARCHAR2(12)
    , city       VARCHAR2(30)
    , state_province VARCHAR2(25)
    , country_id     CHAR(2)
    ) ;
Contrainte hors ligne
Sélectionnez
CREATE TABLE locations_demo
    ( location_id    NUMBER(4) 
    , street_address VARCHAR2(40)
    , postal_code    VARCHAR2(12)
    , city       VARCHAR2(30)
    , state_province VARCHAR2(25)
    , country_id     CHAR(2)
    , CONSTRAINT loc_id_pk PRIMARY KEY (location_id));
Contrainte de clé étrangère en ligne
Sélectionnez
CREATE TABLE dept_20 
   (employee_id     NUMBER(4), 
    last_name       VARCHAR2(10), 
    job_id          VARCHAR2(9), 
    manager_id      NUMBER(4), 
    hire_date       DATE, 
    salary          NUMBER(7,2), 
    commission_pct  NUMBER(7,2), 
    department_id   CONSTRAINT fk_deptno 
                    REFERENCES departments(department_id) );
Contrainte de clé étrangère hors ligne
Sélectionnez
CREATE TABLE dept_20 
   (employee_id     NUMBER(4), 
    last_name       VARCHAR2(10), 
    job_id          VARCHAR2(9), 
    manager_id      NUMBER(4), 
    hire_date       DATE, 
    salary          NUMBER(7,2), 
    commission_pct  NUMBER(7,2), 
    department_id, 
   CONSTRAINT fk_deptno 
      FOREIGN  KEY (department_id) 
      REFERENCES  departments(department_id) );
Clé étrangère avec clause ON DELETE
Sélectionnez
CREATE TABLE dept_20 
   (employee_id     NUMBER(4) PRIMARY KEY, 
    last_name       VARCHAR2(10), 
    job_id          VARCHAR2(9), 
    manager_id      NUMBER(4) CONSTRAINT fk_mgr
                    REFERENCES employees ON DELETE SET NULL, 
    hire_date       DATE, 
    salary          NUMBER(7,2), 
    commission_pct  NUMBER(7,2), 
    department_id   NUMBER(2)   CONSTRAINT fk_deptno 
                    REFERENCES departments(department_id) 
                    ON DELETE CASCADE );
Contraintes de contrôle
Sélectionnez
CREATE TABLE divisions  
   (div_no    NUMBER  CONSTRAINT check_divno
              CHECK (div_no BETWEEN 10 AND 99) 
              DISABLE, 
    div_name  VARCHAR2(9)  CONSTRAINT check_divname
              CHECK (div_name = UPPER(div_name)) 
              DISABLE, 
    office    VARCHAR2(10)  CONSTRAINT check_office
              CHECK (office IN ('DALLAS','BOSTON',
              'PARIS','TOKYO')) 
              DISABLE);
Contrainte de contrôle multi-colonnes
Sélectionnez
CREATE TYPE person_name AS OBJECT
   (first_name VARCHAR2(30), last_name VARCHAR2(30));
/

CREATE TABLE students (name person_name, age INTEGER,
   CHECK (name.first_name IS NOT NULL AND 
          name.last_name IS NOT NULL));
Contraintes indexées
Sélectionnez
CREATE TABLE promotions_var3
    ( promo_id         NUMBER(6)
    , promo_name       VARCHAR2(20)
    , promo_category   VARCHAR2(15)
    , promo_cost       NUMBER(10,2)
    , promo_begin_date DATE
    , promo_end_date   DATE
    , CONSTRAINT promo_id_u UNIQUE (promo_id, promo_cost)
         USING INDEX (CREATE UNIQUE INDEX promo_ix1
            ON promotions_var3 (promo_id, promo_cost))
    , CONSTRAINT promo_id_u2 UNIQUE (promo_cost, promo_id) 
         USING INDEX promo_ix1);
Création d'une table dans un cluster
Sélectionnez
CREATE TABLE dept_10
   CLUSTER personnel (department_id)
   AS SELECT * FROM employees WHERE department_id = 10;

précédentsommairesuivant

Le guide Oracle par Orafrance, Helyos et SheikYerbouti