搜尋
首頁資料庫Oracleoracle資料庫怎麼修改字段
oracle資料庫怎麼修改字段Mar 02, 2022 pm 06:13 PM
oracle資料庫

在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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
oracle怎么查询所有索引oracle怎么查询所有索引May 13, 2022 pm 05:23 PM

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

什么是oracle asm什么是oracle asmApr 18, 2022 pm 04:16 PM

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

Oracle怎么查询端口号Oracle怎么查询端口号May 13, 2022 am 10:10 AM

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

oracle全角怎么转半角oracle全角怎么转半角May 13, 2022 pm 03:21 PM

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

oracle查询怎么不区分大小写oracle查询怎么不区分大小写May 10, 2022 pm 05:45 PM

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

oracle怎么删除sequenceoracle怎么删除sequenceMay 13, 2022 pm 03:35 PM

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

oracle怎么查询数据类型oracle怎么查询数据类型May 13, 2022 pm 04:19 PM

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

Oracle怎么修改sessionOracle怎么修改sessionMay 13, 2022 pm 05:06 PM

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。