Maison > base de données > Oracle > Comment modifier les champs dans la base de données Oracle

Comment modifier les champs dans la base de données Oracle

青灯夜游
Libérer: 2022-03-02 18:13:51
original
18360 Les gens l'ont consulté

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.

Comment modifier les champs dans la base de données Oracle

L'environnement d'exploitation de ce tutoriel : système Windows 7, version Oracle 11g, ordinateur Dell G3.

Comment modifier les champs dans la base de données Oracle

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 字段名 需要执行的操作;
Copier après la connexion

语句很直接。要修改表的列,需要指定要执行的列名,表名和操作。

Oracle允许执行多种操作,但以下是主要常用的操作:

  • 修改列的可见性

  • 允许或不允许NULL值

  • 缩短或扩大列的大小

  • 更改列的默认值

  • 修改虚拟列的表达式

要修改多个列,请使用以下语法:

ALTER TABLE 表名
MODIFY (
    字段名1 action,
    字段名2 action,
    ...
);
Copier après la connexion

Oracle ALTER TABLE MODIFY列示例

首先,为演示创建一个名为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)
);
Copier après la connexion

其次,向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');
Copier après la connexion

第三,通过使用下面的SELECT语句验证插入操作:

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

执行上面查询语句,得到以下结果 -

Comment modifier les champs dans la base de données Oracle

1. 修改列的可见性

在Oracle 12c中,可以将表列定义为不可见或可见。不可见列不可用于查询,如:

SELECT
    *
FROM
    table_name;
Copier après la connexion

或者,

DESCRIBE table_name;
Copier après la connexion

都是查到不到不可见列的。

但是,可以通过在查询中显式指定不可见列来查询:

SELECT
    invisible_column_1,
    invisible_column_2
FROM
    table_name;
Copier après la connexion

默认情况下,表列是可见的。可以在创建表或使用ALTER TABLE MODIFY列语句时定义不可见列。

例如,以下语句使full_name列不可见:

ALTER TABLE accounts 
MODIFY full_name INVISIBLE;
Copier après la connexion

执行再次查询表中数据,得到以下结果 -

Comment modifier les champs dans la base de données Oracle

以下语句返回accounts表除了full_name列以外的所有列中返回数据:

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

这是因为full_name列是不可见的。要将列从不可见变为可见,请使用以下语句:

ALTER TABLE accounts 
MODIFY full_name VISIBLE;
Copier après la connexion

2. 允许或不允许null示例

以下语句将email列更改为接受非空(not null)值:

ALTER TABLE accounts 
MODIFY email VARCHAR2( 100 ) NOT NULL;
Copier après la connexion
Copier après la connexion

但是,Oracle发出以下错误:

SQL Error: ORA-02296: cannot enable (OT.) - null values found
Copier après la connexion

因为当将列从可为null改为not null时,必须确保现有数据符合新约束(也就是说,如果原来数据中NULL是不行的)。

为了解决这个问题,首先更新email列的值:

UPDATE 
    accounts
SET 
    email = LOWER(first_name || '.' || last_name || '@oraok.com') ;
Copier après la connexion

请注意,LOWER()函数将字符串转换为小写字母。

然后改变email列的约束:

ALTER TABLE accounts 
MODIFY email VARCHAR2( 100 ) NOT NULL;
Copier après la connexion
Copier après la connexion

现在,它应该就会按预期那样工作了。

3. 扩大或缩短列示例的大小

假设要添加国际代码到phone列上,比如:前缀加上+86。 在修改列的值之前,必须使用以下语句扩大phone列的大小:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 24 );
Copier après la connexion

现在,我们可以更新电话号码的数据了:

UPDATE
    accounts
SET
    phone = '+86 ' || phone;
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

执行上面查询语句结果中,应该可以看到原电话号码前缀有加上+86的国际区号了。

Comment modifier les champs dans la base de données Oracle

要缩短列的大小,请确保列中的所有数据都符合新的大小。

例如,尝试将phone列的大小缩减到12个字符:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 12 );
Copier après la connexion
Copier après la connexion

Oracle数据库发出以下错误:

SQL Error: ORA-01441: cannot decrease column length because some  value is too big
Copier après la connexion

要解决这个问题,首先,应该从电话号码中删除国际代码(即:+86):

UPDATE
    accounts
SET
    phone = REPLACE(
        phone,
        '+86 ',
        ''
    );
Copier après la connexion

REPLACE()函数用一个新的子字符串替换一个子字符串。在这种情况下,它将用空字符串替换+86

然后缩短phone列的大小:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 12 );
Copier après la connexion
Copier après la connexion

4. 修改虚拟列

假设按以下两列的格式填写全名:

last_name, first_name
Copier après la connexion

为此,可以更改虚拟列full_name

Pour modifier la définition d'une colonne dans un tableau, utilisez la syntaxe de colonne ALTER TABLE MODIFY comme 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
🎜L'instruction est simple. Pour modifier les colonnes d'une table, vous devez spécifier le nom de la colonne, le nom de la table et l'opération à effectuer. 🎜🎜Oracle vous permet d'effectuer diverses opérations, mais voici les principales opérations couramment utilisées : 🎜
  • 🎜Modifier la visibilité d'une colonne🎜< /li>
  • 🎜Autoriser ou interdire les valeurs NULL🎜
  • 🎜Raccourcir ou agrandir la taille d'une colonne🎜
  • 🎜Modifier la valeur par défaut d'une colonne🎜
  • 🎜Modifier l'expression d'une colonne virtuelle Formule 🎜
🎜Pour modifier plusieurs colonnes, utilisez la syntaxe suivante : 🎜
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

Exemple de colonne Oracle ALTER TABLE MODIFY 🎜🎜🎜 Tout d'abord 🎜, créez une nouvelle table appelée accounts pour la démo : 🎜
ALTER TABLE accounts
ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
Copier après la connexion
Copier après la connexion
🎜🎜Deuxièmement 🎜, insérez quelques lignes dans les accounts table : 🎜
ALTER TABLE accounts 
MODIFY status DEFAULT 0;
Copier après la connexion
Copier après la connexion
🎜🎜Troisièmement 🎜, vérifiez l'opération d'insertion en utilisant l'instruction SELECT suivante : 🎜
INSERT INTO accounts ( first_name, last_name, email, phone )
VALUES ( &#39;Julia&#39;,
         &#39;Madden&#39;,
         &#39;julia.madden@oraok.com&#39;,
         &#39;410-555-0200&#39; );
Copier après la connexion
Copier après la connexion
🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜🎜Comment modifier les champs dans la base de données Oracle🎜🎜🎜1. Modifier la visibilité des colonnes 🎜🎜🎜Dans Oracle 12c, les colonnes des tableaux peuvent être définies comme invisibles ou visibles. Les colonnes invisibles ne peuvent pas être utilisées pour des requêtes telles que : 🎜
SELECT
  *
FROM
  accounts;
Copier après la connexion
Copier après la connexion
🎜 ou 🎜rrreee🎜 Les colonnes invisibles sont introuvables. 🎜🎜Cependant, il est possible d'interroger des colonnes invisibles en les spécifiant explicitement dans la requête : 🎜rrreee🎜Les colonnes du tableau sont visibles par défaut. Les colonnes invisibles peuvent être définies lors de la création de la table ou à l'aide de l'instruction de colonne 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 : 🎜🎜Comment modifier les champs dans la base de données Oracle🎜🎜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. 🎜🎜Comment modifier les champs dans la base de données Oracle🎜🎜À 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 || &#39;, &#39; || 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

执行上面查询语句,可以看到以下结果

Comment modifier les champs dans la base de données Oracle

5. 修改列的默认值

添加一个名为status的新列,默认值为1accounts表中。参考以下语句 -

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 ( &#39;Julia&#39;,
         &#39;Madden&#39;,
         &#39;julia.madden@oraok.com&#39;,
         &#39;410-555-0200&#39; );
Copier après la connexion
Copier après la connexion

现在,查询accounts表中的数据:

SELECT
  *
FROM
  accounts;
Copier après la connexion
Copier après la connexion

执行上面查询语句,应该看类似下面的结果 

Comment modifier les champs dans la base de données Oracle

正如所看到的那样,ID4的账户的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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal