在oracle中,可以利用「ALTER TABLE MODIFY」語句來修改字段,語法為「ALTER TABLE 表名MODIFY 字段名需要執行的操作;」;常用操作有:修改列的可見性、更改列的預設值、修改虛擬列的表達式等。
本教學操作環境: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;
執行上面查詢語句,得到以下結果-
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 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教程》
以上是oracle資料庫怎麼修改字段的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

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

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

記事本++7.3.1
好用且免費的程式碼編輯器

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