Dans Oracle, vous pouvez utiliser l'instruction "ALTER TABLE MODIFY" pour modifier les champs. La syntaxe est "ALTER TABLE table name MODIFY field name les opérations courantes incluent : modifier la visibilité d'une colonne et changer le nom du champ. valeur par défaut d'une colonne, modifier l'expression des colonnes virtuelles, etc.

L'environnement d'exploitation de ce tutoriel : système Windows 7, version Oracle 11g, ordinateur Dell G3.
Dans Oracle, vous pouvez utiliser l'instruction "ALTER TABLE MODIFY" pour modifier les champs et changer la définition des champs existants.ALTER TABLE MODIFY”语句来修改字段,更改现有字段的定义。
要更改表中列的定义,请按如下所示使用ALTER TABLE MODIFY列语法:
ALTER TABLE 表名 MODIFY 字段名 需要执行的操作;
语句很直接。要修改表的列,需要指定要执行的列名,表名和操作。
Oracle允许执行多种操作,但以下是主要常用的操作:
修改列的可见性
允许或不允许NULL值
缩短或扩大列的大小
更改列的默认值
修改虚拟列的表达式
要修改多个列,请使用以下语法:
ALTER TABLE 表名 MODIFY ( 字段名1 action, 字段名2 action, ... );
首先,为演示创建一个名为accounts的新表:
-- 12c语法 CREATE TABLE accounts ( account_id NUMBER GENERATED BY DEFAULT AS IDENTITY, first_name VARCHAR2(25) NOT NULL, last_name VARCHAR2(25) NOT NULL, email VARCHAR2(100), phone VARCHAR2(12) , full_name VARCHAR2(51) GENERATED ALWAYS AS( first_name || ' ' || last_name ), PRIMARY KEY(account_id) );
其次,向accounts表中插入一些行:
INSERT INTO accounts(first_name,last_name,phone) VALUES('Trinity', 'Knox', '410-555-0197'); INSERT INTO accounts(first_name,last_name,phone) VALUES('Mellissa', 'Porter', '410-555-0198'); INSERT INTO accounts(first_name,last_name,phone) VALUES('Leeanna', 'Bowman', '410-555-0199');
第三,通过使用下面的SELECT语句验证插入操作:
SELECT * FROM accounts;
执行上面查询语句,得到以下结果 -
1. 修改列的可见性
在Oracle 12c中,可以将表列定义为不可见或可见。不可见列不可用于查询,如:
SELECT * FROM table_name;
或者,
DESCRIBE table_name;
都是查到不到不可见列的。
但是,可以通过在查询中显式指定不可见列来查询:
SELECT invisible_column_1, invisible_column_2 FROM table_name;
默认情况下,表列是可见的。可以在创建表或使用ALTER TABLE MODIFY列语句时定义不可见列。
例如,以下语句使full_name列不可见:
ALTER TABLE accounts MODIFY full_name INVISIBLE;
执行再次查询表中数据,得到以下结果 -

以下语句返回accounts表除了full_name列以外的所有列中返回数据:
SELECT * FROM accounts;
这是因为full_name列是不可见的。要将列从不可见变为可见,请使用以下语句:
ALTER TABLE accounts MODIFY full_name VISIBLE;
2. 允许或不允许null示例
以下语句将email列更改为接受非空(not null)值:
ALTER TABLE accounts MODIFY email VARCHAR2( 100 ) NOT NULL;
但是,Oracle发出以下错误:
SQL Error: ORA-02296: cannot enable (OT.) - null values found
因为当将列从可为null改为not null时,必须确保现有数据符合新约束(也就是说,如果原来数据中NULL是不行的)。
为了解决这个问题,首先更新email列的值:
UPDATE accounts SET email = LOWER(first_name || '.' || last_name || '@oraok.com') ;
请注意,LOWER()函数将字符串转换为小写字母。
然后改变email列的约束:
ALTER TABLE accounts MODIFY email VARCHAR2( 100 ) NOT NULL;
现在,它应该就会按预期那样工作了。
3. 扩大或缩短列示例的大小
假设要添加国际代码到phone列上,比如:前缀加上+86。 在修改列的值之前,必须使用以下语句扩大phone列的大小:
ALTER TABLE accounts MODIFY phone VARCHAR2( 24 );
现在,我们可以更新电话号码的数据了:
UPDATE accounts SET phone = '+86 ' || phone;
以下语句验证更新:
SELECT * FROM accounts;
执行上面查询语句结果中,应该可以看到原电话号码前缀有加上+86的国际区号了。
要缩短列的大小,请确保列中的所有数据都符合新的大小。
例如,尝试将phone列的大小缩减到12个字符:
ALTER TABLE accounts MODIFY phone VARCHAR2( 12 );
Oracle数据库发出以下错误:
SQL Error: ORA-01441: cannot decrease column length because some value is too big
要解决这个问题,首先,应该从电话号码中删除国际代码(即:+86):
UPDATE accounts SET phone = REPLACE( phone, '+86 ', '' );
REPLACE()函数用一个新的子字符串替换一个子字符串。在这种情况下,它将用空字符串替换+86。
然后缩短phone列的大小:
ALTER TABLE accounts MODIFY phone VARCHAR2( 12 );
4. 修改虚拟列
假设按以下两列的格式填写全名:
last_name, first_name
为此,可以更改虚拟列full_name
ALTER TABLE MODIFYcomme suit :
ALTER TABLE accounts MODIFY full_name VARCHAR2(52) GENERATED ALWAYS AS (last_name || ', ' || first_name);
SELECT * FROM accounts;
accountspour la démo :
ALTER TABLE accounts ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
accountstable :
ALTER TABLE accounts MODIFY status DEFAULT 0;
SELECTsuivante :
INSERT INTO accounts ( first_name, last_name, email, phone ) VALUES ( 'Julia', 'Madden', 'julia.madden@oraok.com', '410-555-0200' );
SELECT * FROM accounts;
ALTER TABLE MODIFY. Par exemple, l'instruction suivante rend la colonnefull_nameinvisible : rrreeeExécutez à nouveau l'interrogation des données dans la table et obtenez les résultats suivants :
L'instruction suivante renvoie lescomptestable exceptfull_name< Renvoie les données dans toutes les colonnes sauf la colonne /code> : rrreee C'est parce que la colonne full_namen'est pas visible. Pour changer une colonne d'invisible à visible, utilisez l'instruction suivante : rrreee2. Autoriser ou interdire l'exemple nulL'instruction suivante La colonneemailest modifiée pour accepter les valeurs non nulles (not null) : rrreee Cependant, Oracle émet l'erreur suivante : rrreee car lors du changement de colonne disponible enLorsque nullest remplacé parnot null, vous devez vous assurer que les données existantes sont conformes aux nouvelles contraintes (c'est-à-dire siNULLn'est pas autorisé dans les données originales). Pour résoudre ce problème, mettez d'abord à jour la valeur de la colonneemail: rrreeeVeuillez noter queLOWER()convertit une chaîne en lettres minuscules. Modifiez ensuite la contrainte sur la colonneemail: rrreeeMaintenant, cela devrait fonctionner comme prévu.3. Agrandissez ou réduisez la taille de l'exemple de colonneSupposons que vous souhaitiez ajouter des codes internationaux autéléphone colonne, telle que : Préfixe avec +86. Avant de modifier la valeur de la colonne, vous devez agrandir la taille de la colonnetéléphoneà l'aide de l'instruction suivante : rrreeeMaintenant, nous pouvons mettre à jour les données du numéro de téléphone : rrreeeL'instruction suivante vérifie la mise à jour : rrreeeExecute Dans les résultats de l'instruction de requête ci-dessus, vous devriez pouvoir voir que le numéro de téléphone d'origine a l'indicatif régional international préfixé par+86.
À Raccourcissez la taille d'une colonne, en vous assurant que toutes les données de la colonne correspondent à la nouvelle taille. Par exemple, essayez de réduire la taille de la colonnetéléphoneà12caractères : rrreeeOracle Database génère l'erreur suivante : rrreeePour résoudre ce problème, commencez par , vous devez supprimer les codes internationaux des numéros de téléphone (c'est-à-dire :+86) : la fonction rrreeeREPLACE() remplace une sous-chaîne par une nouvelle sous-chaîne. Dans ce cas, il remplacera+86par la chaîne vide. Réduisez ensuite la taille de la colonnetéléphone: rrreee4. Modifiez la colonne virtuelleSupposons que vous appuyez sur les deux colonnes suivantes Remplissez le nom complet au format : rrreee Pour cela, vous pouvez changer l'expression de la colonne virtuellefull_namecomme suit :
ALTER TABLE accounts MODIFY full_name VARCHAR2(52) GENERATED ALWAYS AS (last_name || ', ' || first_name);
Copier après la connexion
Copier après la connexion
以下语句验证修改:
SELECT * FROM accounts;
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
执行上面查询语句,可以看到以下结果

5. 修改列的默认值
添加一个名为status的新列,默认值为1到accounts表中。参考以下语句 -
ALTER TABLE accounts ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
Copier après la connexion
Copier après la connexion
当执行了该语句,就会将accounts表中的所有现有行的status列中的值设置为1。
要将status列的默认值更改为0,请使用以下语句:
ALTER TABLE accounts MODIFY status DEFAULT 0;
Copier après la connexion
Copier après la connexion
可以在accounts表中添加一个新行来检查status列的默认值是0还是1:
INSERT INTO accounts ( first_name, last_name, email, phone ) VALUES ( 'Julia', 'Madden', 'julia.madden@oraok.com', '410-555-0200' );
Copier après la connexion
Copier après la connexion
现在,查询accounts表中的数据:
SELECT * FROM accounts;
Copier après la connexion
Copier après la connexion
执行上面查询语句,应该看类似下面的结果

正如所看到的那样,ID为4的账户的status列的值是0。
推荐教程:《Oracle教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Base de données trois paradigmes
Comment supprimer une base de données
Oracle effacer les données du tableau
Comment se connecter à la base de données en VB
Base de données de restauration MySQL
L'utilisation de déclarer dans Oracle
Comment paginer dans Oracle
Historique des opérations de la table de vue Oracle