Je crée un tableau dans Oracle 11g avec la valeur par défaut pour l'une des colonnes. La syntaxe est:
create table xyz(emp number,ename varchar2(100),salary number default 0);
Cela a réussi. Pour certaines raisons, je dois créer une autre table avec la même structure de table et les mêmes données anciennes. J'ai donc créé une nouvelle table avec le nom abc
as
create table abc as select * from xyz.
Ici "abc" créé avec succès avec la même structure et les mêmes données que l'ancienne table xyz
. Mais pour la colonne "salaire" dans l'ancienne table "xyz", la valeur par défaut était "0". Mais dans la table nouvellement créée "abc", la valeur par défaut n'est pas définie.
Tout cela dans Oracle 11g. Veuillez me dire la raison pour laquelle la valeur par défaut n'a pas été définie et comment nous pouvons la définir à l'aide de l'instruction select.
Vous pouvez spécifier les contraintes et les valeurs par défaut dans CREATE TABLE AS SELECT, mais la syntaxe est la suivante
create table t1 (id number default 1 not null);
insert into t1 (id) values (2);
create table t2 (id default 1 not null)
as select * from t1;
Autrement dit, il n'héritera pas des contraintes de la table/sélection source. Seul le type de données (longueur/précision/échelle) est déterminé par la sélection.
La raison en est que CTAS (Create table as select) ne copie aucune métadonnée de la source vers la table cible, à savoir
Pour réaliser ce que vous voulez, je
Vous devrez alter table abc modify (salary default 0);
la nouvelle table hérite uniquement de la contrainte "non nulle" et d'aucune autre contrainte. Ainsi, vous pouvez modifier la table après l'avoir créée avec la commande "créer la table en tant que" ou vous pouvez définir toutes les contraintes dont vous avez besoin en suivant la
create table t1 (id number default 1 not null);
insert into t1 (id) values (2);
create table t2 as select * from t1;
Cela créera la table t2 avec une contrainte non nulle. Mais pour une autre contrainte, sauf "non nul", vous devez utiliser la syntaxe suivante
create table t1 (id number default 1 unique);
insert into t1 (id) values (2);
create table t2 (id default 1 unique)
as select * from t1;