Heim > Datenbank > Oracle > Hauptteil

So ändern Sie Felder in der Oracle-Datenbank

青灯夜游
Freigeben: 2022-03-02 18:13:51
Original
18295 Leute haben es durchsucht

In Oracle können Sie die Anweisung „ALTER TABLE MODIFY“ verwenden, um Felder zu ändern. Die Syntax lautet „Auszuführende Operationen ALTER TABLE MODIFY“; Standardwert einer Spalte ändern, den Ausdruck virtueller Spalten ändern usw.

So ändern Sie Felder in der Oracle-Datenbank

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Oracle 11g-Version, Dell G3-Computer.

So ändern Sie Felder in der Oracle-Datenbank

In Oracle können Sie die Anweisung „ALTER TABLE MODIFY“ verwenden, um Felder zu ändern und die Definition vorhandener Felder zu ändern. ALTER TABLE MODIFY”语句来修改字段,更改现有字段的定义。

要更改表中列的定义,请按如下所示使用ALTER TABLE MODIFY列语法:

ALTER TABLE 表名 
MODIFY 字段名 需要执行的操作;
Nach dem Login kopieren

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

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

  • 修改列的可见性

  • 允许或不允许NULL值

  • 缩短或扩大列的大小

  • 更改列的默认值

  • 修改虚拟列的表达式

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

ALTER TABLE 表名
MODIFY (
    字段名1 action,
    字段名2 action,
    ...
);
Nach dem Login kopieren

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)
);
Nach dem Login kopieren

其次,向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');
Nach dem Login kopieren

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

SELECT
    *
FROM
    accounts;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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

So ändern Sie Felder in der Oracle-Datenbank

1. 修改列的可见性

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

SELECT
    *
FROM
    table_name;
Nach dem Login kopieren

或者,

DESCRIBE table_name;
Nach dem Login kopieren

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

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

SELECT
    invisible_column_1,
    invisible_column_2
FROM
    table_name;
Nach dem Login kopieren

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

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

ALTER TABLE accounts 
MODIFY full_name INVISIBLE;
Nach dem Login kopieren

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

So ändern Sie Felder in der Oracle-Datenbank

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

SELECT
    *
FROM
    accounts;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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

ALTER TABLE accounts 
MODIFY full_name VISIBLE;
Nach dem Login kopieren

2. 允许或不允许null示例

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

ALTER TABLE accounts 
MODIFY email VARCHAR2( 100 ) NOT NULL;
Nach dem Login kopieren
Nach dem Login kopieren

但是,Oracle发出以下错误:

SQL Error: ORA-02296: cannot enable (OT.) - null values found
Nach dem Login kopieren

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

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

UPDATE 
    accounts
SET 
    email = LOWER(first_name || '.' || last_name || '@oraok.com') ;
Nach dem Login kopieren

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

然后改变email列的约束:

ALTER TABLE accounts 
MODIFY email VARCHAR2( 100 ) NOT NULL;
Nach dem Login kopieren
Nach dem Login kopieren

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

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

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

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 24 );
Nach dem Login kopieren

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

UPDATE
    accounts
SET
    phone = '+86 ' || phone;
Nach dem Login kopieren

以下语句验证更新:

SELECT
    *
FROM
    accounts;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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

So ändern Sie Felder in der Oracle-Datenbank

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

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

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 12 );
Nach dem Login kopieren
Nach dem Login kopieren

Oracle数据库发出以下错误:

SQL Error: ORA-01441: cannot decrease column length because some  value is too big
Nach dem Login kopieren

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

UPDATE
    accounts
SET
    phone = REPLACE(
        phone,
        '+86 ',
        ''
    );
Nach dem Login kopieren

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

然后缩短phone列的大小:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 12 );
Nach dem Login kopieren
Nach dem Login kopieren

4. 修改虚拟列

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

last_name, first_name
Nach dem Login kopieren

为此,可以更改虚拟列full_name

Um die Definition einer Spalte in einer Tabelle zu ändern, verwenden Sie die Spaltensyntax ALTER TABLE MODIFY wie folgt: 🎜
ALTER TABLE accounts 
MODIFY full_name VARCHAR2(52) 
GENERATED ALWAYS AS (last_name || ', ' || first_name);
Nach dem Login kopieren
Nach dem Login kopieren
🎜Die Anweisung ist unkompliziert. Um die Spalten einer Tabelle zu ändern, müssen Sie den Spaltennamen, den Tabellennamen und den auszuführenden Vorgang angeben. 🎜🎜Oracle ermöglicht Ihnen die Ausführung einer Vielzahl von Vorgängen, die folgenden sind jedoch die am häufigsten verwendeten Vorgänge: 🎜
  • 🎜Ändern der Sichtbarkeit einer Spalte🎜< /li>
  • 🎜NULL-Werte zulassen oder nicht zulassen🎜
  • 🎜Verkürzen oder erweitern Sie die Größe einer Spalte🎜
  • 🎜Ändern Sie den Standardwert einer Spalte🎜
  • 🎜Ändern Sie den Ausdruck einer virtuellen Spaltenformel 🎜
🎜Um mehrere Spalten zu ändern, verwenden Sie die folgende Syntax: 🎜
SELECT
    *
FROM
    accounts;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Oracle ALTER TABLE MODIFY-Spaltenbeispiel 🎜🎜🎜 Zuerst 🎜 erstellen Sie eine neue Tabelle mit dem Namen accounts für die Demo: 🎜
ALTER TABLE accounts
ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
Nach dem Login kopieren
Nach dem Login kopieren
🎜🎜Zweitens 🎜 fügen Sie einige Zeilen in die accounts ein Tabelle: 🎜
ALTER TABLE accounts 
MODIFY status DEFAULT 0;
Nach dem Login kopieren
Nach dem Login kopieren
🎜🎜Drittens 🎜, überprüfen Sie den Einfügevorgang mit der folgenden SELECT-Anweisung: 🎜
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; );
Nach dem Login kopieren
Nach dem Login kopieren
🎜Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse -🎜🎜So ändern Sie Felder in der Oracle-Datenbank🎜🎜🎜1. Ändern Sie die Sichtbarkeit von Spalten 🎜🎜🎜In Oracle 12c können Tabellenspalten als unsichtbar oder sichtbar definiert werden. Unsichtbare Spalten können nicht für Abfragen verwendet werden, z. B.: 🎜
SELECT
  *
FROM
  accounts;
Nach dem Login kopieren
Nach dem Login kopieren
🎜 oder 🎜rrreee🎜. Unsichtbare Spalten können nicht gefunden werden. 🎜🎜Es ist jedoch möglich, unsichtbare Spalten abzufragen, indem man sie explizit in der Abfrage angibt: 🎜rrreee🎜Tabellenspalten sind standardmäßig sichtbar. Unsichtbare Spalten können beim Erstellen der Tabelle oder mithilfe der Spaltenanweisung ALTER TABLE MODIFY definiert werden. 🎜🎜Zum Beispiel macht die folgende Anweisung die Spalte vollständiger_Name unsichtbar: 🎜rrreee🎜Führen Sie die Abfrage der Daten in der Tabelle erneut aus und erhalten Sie die folgenden Ergebnisse: 🎜🎜So ändern Sie Felder in der Oracle-Datenbank🎜🎜Die folgende Anweisung gibt die accounts zurück Tabelle außer full_name< Gibt Daten in allen Spalten außer der Spalte /code> zurück: 🎜rrreee🎜 Dies liegt daran, dass die Spalte <code>full_name nicht sichtbar ist. Um eine Spalte von unsichtbar in sichtbar zu ändern, verwenden Sie die folgende Anweisung: 🎜rrreee🎜🎜2. Nullbeispiel zulassen oder nicht zulassen🎜🎜🎜Die folgende Anweisung wird Die Spalte email wurde so geändert, dass sie Nicht-Null-Werte (nicht null) akzeptiert: 🎜rrreee🎜 Oracle gibt jedoch den folgenden Fehler aus: 🎜rrreee🎜, weil beim Ändern der Spalte „Verfügbar“ die Spalte „E-Mail“ geändert wird zu Wenn null in nicht null geändert wird, müssen Sie sicherstellen, dass die vorhandenen Daten den neuen Einschränkungen entsprechen (d. h., wenn NULL nicht ist). in den Originaldaten erlaubt). 🎜🎜Um dieses Problem zu lösen, aktualisieren Sie zunächst den Wert der Spalte email: 🎜rrreee🎜Bitte beachten Sie, dass LOWER() wandelt einen String in Kleinbuchstaben um. 🎜🎜Ändern Sie dann die Einschränkung für die Spalte email: 🎜rrreee🎜Jetzt sollte es wie erwartet funktionieren. 🎜🎜🎜3. Erweitern oder verkürzen Sie die Größe des Spaltenbeispiels🎜🎜🎜Angenommen, Sie möchten internationale Vorwahlen zum Telefon</code hinzufügen > Spalte, wie zum Beispiel: Präfix mit <code>+86. Bevor Sie den Wert der Spalte ändern, müssen Sie die Größe der Spalte phone mit der folgenden Anweisung erweitern: 🎜rrreee🎜Jetzt können wir die Telefonnummerndaten aktualisieren: 🎜rrreee🎜Die folgende Anweisung überprüft die Update: 🎜rrreee🎜Execute In den Ergebnissen der obigen Abfrageanweisung sollten Sie sehen können, dass die ursprüngliche Telefonnummer die internationale Vorwahl mit dem Präfix +86 hat. 🎜🎜So ändern Sie Felder in der Oracle-Datenbank🎜🎜An Verkürzen Sie die Größe einer Spalte und stellen Sie sicher, dass alle Daten in der Spalte der neuen Größe entsprechen. 🎜🎜Versuchen Sie beispielsweise, die Größe der Spalte phone auf 12 Zeichen zu reduzieren: 🎜rrreee🎜Oracle Database gibt den folgenden Fehler aus: 🎜rrreee🎜Um dieses Problem zunächst zu beheben , sollten Sie internationale Vorwahlen von Telefonnummern entfernen (z. B.: +86): 🎜rrreee🎜REPLACE()-Funktion ersetzt einen Teilstring durch einen neuen Teilstring. In diesem Fall wird +86 durch die leere Zeichenfolge ersetzt. 🎜🎜Dann verkürzen Sie die Größe der Spalte phone: 🎜rrreee🎜🎜4. Ändern Sie die virtuelle Spalte🎜🎜🎜Angenommen, Sie Drücken Sie die folgenden zwei Spalten. Geben Sie den vollständigen Namen im Format ein: 🎜rrreee🎜 Dazu können Sie den Ausdruck der virtuellen Spalte vollständiger_Name wie folgt ändern: 🎜
ALTER TABLE accounts 
MODIFY full_name VARCHAR2(52) 
GENERATED ALWAYS AS (last_name || &#39;, &#39; || first_name);
Nach dem Login kopieren
Nach dem Login kopieren

以下语句验证修改:

SELECT
    *
FROM
    accounts;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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

So ändern Sie Felder in der Oracle-Datenbank

5. 修改列的默认值

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

ALTER TABLE accounts
ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
Nach dem Login kopieren
Nach dem Login kopieren

当执行了该语句,就会将accounts表中的所有现有行的status列中的值设置为1

要将status列的默认值更改为0,请使用以下语句:

ALTER TABLE accounts 
MODIFY status DEFAULT 0;
Nach dem Login kopieren
Nach dem Login kopieren

可以在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; );
Nach dem Login kopieren
Nach dem Login kopieren

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

SELECT
  *
FROM
  accounts;
Nach dem Login kopieren
Nach dem Login kopieren

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

So ändern Sie Felder in der Oracle-Datenbank

正如所看到的那样,ID4的账户的status列的值是0

推荐教程:《Oracle教程

Das obige ist der detaillierte Inhalt vonSo ändern Sie Felder in der Oracle-Datenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!