首頁 > 資料庫 > Oracle > 主體

oracle資料庫怎麼修改字段

青灯夜游
發布: 2022-03-02 18:13:51
原創
18312 人瀏覽過

在oracle中,可以利用「ALTER TABLE MODIFY」語句來修改字段,語法為「ALTER TABLE 表名MODIFY 字段名需要執行的操作;」;常用操作有:修改列的可見性、更改列的預設值、修改虛擬列的表達式等。

oracle資料庫怎麼修改字段

本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。

oracle資料庫怎麼修改字段

在oracle中,可以利用「ALTER TABLE MODIFY」語句來修改字段,更改現有字段的定義。

要變更表格中列的定義,請如下所示使用ALTER TABLE MODIFY列語法:

ALTER TABLE 表名 
MODIFY 字段名 需要执行的操作;
登入後複製

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

Oracle允許執行多種操作,但以下是主要常用的操作:

  • #修改列的可見性

  • 允許或不允許NULL值

  • 縮短或擴大列的大小

  • #更改列的預設值

  • #修改虛擬列的表達式

要修改多個列,請使用下列語法:

ALTER TABLE 表名
MODIFY (
    字段名1 action,
    字段名2 action,
    ...
);
登入後複製

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)
);
登入後複製

其次,向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;
登入後複製
登入後複製
登入後複製
登入後複製

執行上面查詢語句,得到以下結果-

oracle資料庫怎麼修改字段

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;
登入後複製

執行再次查詢表中數據,得到以下結果-

oracle資料庫怎麼修改字段

以下語句傳回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的國際區號了。

oracle資料庫怎麼修改字段

要縮短列的大小,請確保列中的所有資料都符合新的大小。

例如,嘗試將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 accounts 
MODIFY full_name VARCHAR2(52) 
GENERATED ALWAYS AS (last_name || ', ' || first_name);
登入後複製

以下语句验证修改:

SELECT
    *
FROM
    accounts;
登入後複製
登入後複製
登入後複製
登入後複製

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

oracle資料庫怎麼修改字段

5. 修改列的默认值

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

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;
登入後複製

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

oracle資料庫怎麼修改字段

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

推荐教程:《Oracle教程

以上是oracle資料庫怎麼修改字段的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板