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 MODIFY
comme suit : 🎜ALTER TABLE accounts MODIFY full_name VARCHAR2(52) GENERATED ALWAYS AS (last_name || ', ' || first_name);
SELECT * FROM accounts;
accounts
pour la démo : 🎜ALTER TABLE accounts ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
accounts
table : 🎜ALTER TABLE accounts MODIFY status DEFAULT 0;
SELECT
suivante : 🎜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 colonne full_name
invisible : 🎜rrreee🎜Exécutez à nouveau l'interrogation des données dans la table et obtenez les résultats suivants : 🎜🎜🎜🎜L'instruction suivante renvoie les comptes
table except full_name< Renvoie les données dans toutes les colonnes sauf la colonne /code> : 🎜rrreee🎜 C'est parce que la colonne <code>full_name
n'est pas visible. Pour changer une colonne d'invisible à visible, utilisez l'instruction suivante : 🎜rrreee🎜🎜2. Autoriser ou interdire l'exemple nul🎜🎜🎜L'instruction suivante La colonne email
est 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 en Lorsque null
est remplacé par not null
, vous devez vous assurer que les données existantes sont conformes aux nouvelles contraintes (c'est-à-dire si NULL
n'est pas autorisé dans les données originales). 🎜🎜Pour résoudre ce problème, mettez d'abord à jour la valeur de la colonne email
: 🎜rrreee🎜Veuillez noter que LOWER() convertit une chaîne en lettres minuscules. 🎜🎜Modifiez ensuite la contrainte sur la colonne email
: 🎜rrreee🎜Maintenant, cela devrait fonctionner comme prévu. 🎜🎜🎜3. Agrandissez ou réduisez la taille de l'exemple de colonne🎜🎜🎜Supposons que vous souhaitiez ajouter des codes internationaux au téléphone</code > colonne, telle que : Préfixe avec <code>+86
. Avant de modifier la valeur de la colonne, vous devez agrandir la taille de la colonne téléphone
à l'aide de l'instruction suivante : 🎜rrreee🎜Maintenant, nous pouvons mettre à jour les données du numéro de téléphone : 🎜rrreee🎜L'instruction suivante vérifie la mise à jour : 🎜rrreee🎜Execute 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 colonne téléphone
à 12
caractères : 🎜rrreee🎜Oracle Database génère l'erreur suivante : 🎜rrreee🎜Pour 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 🎜rrreee🎜REPLACE() remplace une sous-chaîne par une nouvelle sous-chaîne. Dans ce cas, il remplacera +86
par la chaîne vide. 🎜🎜Réduisez ensuite la taille de la colonne téléphone
: 🎜rrreee🎜🎜4. Modifiez la colonne virtuelle🎜🎜🎜Supposons 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 virtuelle full_name
comme suit : 🎜ALTER TABLE accounts MODIFY full_name VARCHAR2(52) GENERATED ALWAYS AS (last_name || ', ' || first_name);
以下语句验证修改:
SELECT * FROM accounts;
执行上面查询语句,可以看到以下结果
5. 修改列的默认值
添加一个名为status
的新列,默认值为1
到accounts
表中。参考以下语句 -
ALTER TABLE accounts ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
当执行了该语句,就会将accounts
表中的所有现有行的status
列中的值设置为1
。
要将status
列的默认值更改为0
,请使用以下语句:
ALTER TABLE accounts MODIFY status DEFAULT 0;
可以在accounts
表中添加一个新行来检查status
列的默认值是0
还是1
:
INSERT INTO accounts ( first_name, last_name, email, phone ) VALUES ( 'Julia', 'Madden', 'julia.madden@oraok.com', '410-555-0200' );
现在,查询accounts
表中的数据:
SELECT * FROM accounts;
执行上面查询语句,应该看类似下面的结果
正如所看到的那样,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!