Oracle??? "ALTER TABLE MODIFY" ?? ???? ??? ??? ? ????. ??? "??? ALTER TABLE ??? ?? MODIFY ?? ?? ??"???. ?? ???, ?? ?? ?? ?? ?
? ????? ?? ??: Windows 7 ???, Oracle 11g ??, Dell G3 ???.
Oracle ???????? ??? ???? ??
Oracle??? "ALTER TABLE MODIFY
" ?? ???? ??? ???? ?? ??? ??? ??? ? ????. ALTER TABLE MODIFY
”語(yǔ)句來(lái)修改字段,更改現(xiàn)有字段的定義。
要更改表中列的定義,請(qǐng)按如下所示使用ALTER TABLE MODIFY
列語(yǔ)法:
ALTER TABLE 表名 MODIFY 字段名 需要執(zhí)行的操作;
語(yǔ)句很直接。要修改表的列,需要指定要執(zhí)行的列名,表名和操作。
Oracle允許執(zhí)行多種操作,但以下是主要常用的操作:
修改列的可見(jiàn)性
允許或不允許NULL值
縮短或擴(kuò)大列的大小
更改列的默認(rèn)值
修改虛擬列的表達(dá)式
要修改多個(gè)列,請(qǐng)使用以下語(yǔ)法:
ALTER TABLE 表名 MODIFY ( 字段名1 action, 字段名2 action, ... );
Oracle ALTER TABLE MODIFY列示例
首先,為演示創(chuàng)建一個(gè)名為accounts
的新表:
-- 12c語(yǔ)法 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');
第三,通過(guò)使用下面的SELECT
語(yǔ)句驗(yàn)證插入操作:
SELECT * FROM accounts;
執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果 -
1. 修改列的可見(jiàn)性
在Oracle 12c中,可以將表列定義為不可見(jiàn)或可見(jiàn)。不可見(jiàn)列不可用于查詢,如:
SELECT * FROM table_name;
或者,
DESCRIBE table_name;
都是查到不到不可見(jiàn)列的。
但是,可以通過(guò)在查詢中顯式指定不可見(jiàn)列來(lái)查詢:
SELECT invisible_column_1, invisible_column_2 FROM table_name;
默認(rèn)情況下,表列是可見(jiàn)的。可以在創(chuàng)建表或使用ALTER TABLE MODIFY
列語(yǔ)句時(shí)定義不可見(jiàn)列。
例如,以下語(yǔ)句使full_name
列不可見(jiàn):
ALTER TABLE accounts MODIFY full_name INVISIBLE;
執(zhí)行再次查詢表中數(shù)據(jù),得到以下結(jié)果 -
以下語(yǔ)句返回accounts
表除了full_name
列以外的所有列中返回?cái)?shù)據(jù):
SELECT * FROM accounts;
這是因?yàn)?code>full_name列是不可見(jiàn)的。要將列從不可見(jiàn)變?yōu)榭梢?jiàn),請(qǐng)使用以下語(yǔ)句:
ALTER TABLE accounts MODIFY full_name VISIBLE;
2. 允許或不允許null示例
以下語(yǔ)句將email
列更改為接受非空(not null
)值:
ALTER TABLE accounts MODIFY email VARCHAR2( 100 ) NOT NULL;
但是,Oracle發(fā)出以下錯(cuò)誤:
SQL Error: ORA-02296: cannot enable (OT.) - null values found
因?yàn)楫?dāng)將列從可為null
改為not null
時(shí),必須確保現(xiàn)有數(shù)據(jù)符合新約束(也就是說(shuō),如果原來(lái)數(shù)據(jù)中NULL
是不行的)。
為了解決這個(gè)問(wèn)題,首先更新email
列的值:
UPDATE accounts SET email = LOWER(first_name || '.' || last_name || '@oraok.com') ;
請(qǐng)注意,LOWER()函數(shù)將字符串轉(zhuǎn)換為小寫(xiě)字母。
然后改變email
列的約束:
ALTER TABLE accounts MODIFY email VARCHAR2( 100 ) NOT NULL;
現(xiàn)在,它應(yīng)該就會(huì)按預(yù)期那樣工作了。
3. 擴(kuò)大或縮短列示例的大小
假設(shè)要添加國(guó)際代碼到phone
列上,比如:前綴加上+86
。 在修改列的值之前,必須使用以下語(yǔ)句擴(kuò)大phone
列的大?。?/p>
ALTER TABLE accounts MODIFY phone VARCHAR2( 24 );
現(xiàn)在,我們可以更新電話號(hào)碼的數(shù)據(jù)了:
UPDATE accounts SET phone = '+86 ' || phone;
以下語(yǔ)句驗(yàn)證更新:
SELECT * FROM accounts;
執(zhí)行上面查詢語(yǔ)句結(jié)果中,應(yīng)該可以看到原電話號(hào)碼前綴有加上+86
的國(guó)際區(qū)號(hào)了。
要縮短列的大小,請(qǐng)確保列中的所有數(shù)據(jù)都符合新的大小。
例如,嘗試將phone
列的大小縮減到12
個(gè)字符:
ALTER TABLE accounts MODIFY phone VARCHAR2( 12 );
Oracle數(shù)據(jù)庫(kù)發(fā)出以下錯(cuò)誤:
SQL Error: ORA-01441: cannot decrease column length because some value is too big
要解決這個(gè)問(wèn)題,首先,應(yīng)該從電話號(hào)碼中刪除國(guó)際代碼(即:+86
):
UPDATE accounts SET phone = REPLACE( phone, '+86 ', '' );
REPLACE()函數(shù)用一個(gè)新的子字符串替換一個(gè)子字符串。在這種情況下,它將用空字符串替換+86
。
然后縮短phone
列的大?。?/p>
ALTER TABLE accounts MODIFY phone VARCHAR2( 12 );
4. 修改虛擬列
假設(shè)按以下兩列的格式填寫(xiě)全名:
last_name, first_name
為此,可以更改虛擬列full_name
ALTER TABLE MODIFY
? ??? ?????. ??ALTER TABLE accounts MODIFY full_name VARCHAR2(52) GENERATED ALWAYS AS (last_name || ', ' || first_name);???? ?????. ???? ??? ????? ?? ??, ??? ??, ??? ??? ???? ???. ????Oracle? ???? ??? ??? ??? ? ??? ????? ???? ?? ??? ??? ????. ??
- ??? ?? ?? ????< /li>
- ??NULL ?? ????? ???? ??????
- ??? ??? ???? ???????
- ???? ??? ????
- ???? ? ??? ??? ?? ??
SELECT * FROM accounts;
Oracle ALTER TABLE MODIFY ? ? ?????? ?? ?? ??? accounts
?? ? ???? ????. ??ALTER TABLE accounts
ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
????? ?? ??, accounts
? ?? ?? ?????. ???: ??ALTER TABLE accounts
MODIFY status DEFAULT 0;
????Third ?? , ?? SELECT
?? ???? ?? ??? ?????. ??INSERT INTO accounts ( first_name, last_name, email, phone )
VALUES ( 'Julia',
'Madden',
'julia.madden@oraok.com',
'410-555-0200' );
??? ?? ?? ???? ?? ??? ????.????
??????1. ? ??? ?? ??????Oracle 12c??? ??? ?? ?? ?? ??? ??? ? ????. ??SELECT
*
FROM
accounts;
?? ?? ??rrreee??? ?? ???? ??? ?? ?? ??? ? ????. ??????? ??? ????? ???? ??? ?? ?? ??? ? ????. ??rrreee????? ?? ????? ?????. ??? ?? ?? ???? ????? ALTER TABLE MODIFY
? ?? ??? ? ??? ? ????. ?????? ?? ?? ?? full_name
?? ??? ?? ????. ??rrreee?????? ??? ??? ?? ???? ?? ??? ????.????
?????? ?? ??
? ?????. full_name<? ??? ??? /code> ?? ??? ?? ?? ???? ?????. ??rrreee?? ?? <code>full_name
?? ???? ?? ?????. ?? ??? ? ?? ??? ????? ?? ?? ?????: ??rrreee????2. null ?? ????? ???? ?????????? ?? email
?? null? ??(null? ??
) ?? ????? ???????: ??rrreee?? ??? Oracle? ?? ??? ??????: ??rrreee?? ?? ?? ???? ??? ? to null
? not null
? ??? ? ?? ???? ? ?? ??? ????? ???? ???(?, NULL
? ???? ?? ??). ?? ?????). ????? ??? ????? ?? email
?? ?? ???????. ??rrreee??LOWER() ??? ???? ???? ?????. ?????? ?? email
?? ?? ??? ?????. ??rrreee???? ???? ?????. ??????3. ?? ??? ???? ?????????????</code? ?? ??? ???? ??? ??? ???. > ?(?: <code>+86
???) ? ?? ???? ?? ?? ?? ???? phone
?? ??? ???? ???. ??rrreee???? ???? ???? ????? ? ????. ??rrreee???? ?? ????: ??rrreee??Execute ? ???? ???? ?? ?????? +86
???? ?? ?? ?? ??? ??? ??? ? ????. ????
????To ?? ??? ?? ?? ?? ???? ? ??? ??? ?????. ?????? ?? phone
?? ??? 12
?? ?????. ??rrreee??Oracle ???????? ?? ??? ?????. ??rrreee??? ??? ????? ?? , ?????? ?? ??? ???? ???(?: +86
). ??rrreee??REPLACE() ??? ?? ???? ? ?? ???? ????. ? ?? +86
? ? ???? ?????. ?????? ?? phone
?? ??? ????: ??rrreee????4. ?? ?? ??????????? ?? ? ?? ????. ?? ??? ??rrreee?? ???? ?????. ??? ??? ?? ? full_name
? ??? ??? ?? ??? ? ????. ??ALTER TABLE accounts
MODIFY full_name VARCHAR2(52)
GENERATED ALWAYS AS (last_name || ', ' || first_name);
以下語(yǔ)句驗(yàn)證修改:
SELECT * FROM accounts;
執(zhí)行上面查詢語(yǔ)句,可以看到以下結(jié)果
5. 修改列的默認(rèn)值
添加一個(gè)名為status
的新列,默認(rèn)值為1
到accounts
表中。參考以下語(yǔ)句 -
ALTER TABLE accounts ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
當(dāng)執(zhí)行了該語(yǔ)句,就會(huì)將accounts
表中的所有現(xiàn)有行的status
列中的值設(shè)置為1
。
要將status
列的默認(rèn)值更改為0
,請(qǐng)使用以下語(yǔ)句:
ALTER TABLE accounts MODIFY status DEFAULT 0;
可以在accounts
表中添加一個(gè)新行來(lái)檢查status
列的默認(rèn)值是0
還是1
:
INSERT INTO accounts ( first_name, last_name, email, phone ) VALUES ( 'Julia', 'Madden', 'julia.madden@oraok.com', '410-555-0200' );
現(xiàn)在,查詢accounts
表中的數(shù)據(jù):
SELECT * FROM accounts;
執(zhí)行上面查詢語(yǔ)句,應(yīng)該看類似下面的結(jié)果?
正如所看到的那樣,ID
為4
的賬戶的status
列的值是0
。
推薦教程:《Oracle教程》
? ??? Oracle ??????? ??? ???? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

????? ?? Java? ??? ?? ??? ????. 1. ?? ??? ??? ??????. 2. ? ??; 3. ??? ?? ? ??? ??? ?????. 4. ??? ????? ??????. 5. ?? ???? ??? ?????. 6. ???? ?????? ??? ??? ?????. 7. ???? ??? ??? ?? ?????. 8. ?? ??? ??? ???? ??????. ??? ??? Java ?????? ????? ????? ? ??? ? ? ????.

MySQL 8.0? ???? ??? ??? ??? ???? ?????? ???? ????. Windows?? MSI ?? ???? ???? ?? ????. ???? ?? ??? ????, ??? ??, ?? ?? ??, ?? ???? ??, ??? ?? ??? ? ?? ?????? ????? Zip ??? ???? ???? ??? ?????. Linux (? : Ubuntu)? APT? ?? ???? ??? ??? ?????? ?? ??, ?? ???? ??, ??? ?? ?? ? ?? ?? ??? ???? ????. ?? ???? ????, ?? ????? ????, ?? ???? ???, ???? ????, ?? ??? ???? ?? ?? ? ?? ?? ??? ????? ?? ? ???? ??? ???????.

JDBC? ???? Oracle Database Connection Pool? ???? ???? ??? ?????. 1) ?? ? ??, 2) ?? ??? ?? ?? ??, 3) SQL ?? ?? ? 4) ???? ????. OracleUcp? ???? ??? ????? ???? ??? ??????.

MongoDB?? ?? ??????? ?? ??? "showdbs"??? ???? ????. 1.? ??? ?? ?? ?? ?????? ? ?????. 2. "??"??? ?? ??????? ???? ???? ???? ?? ? ? ????. 3. "??"? "??"? ?? ?? ?????????? ??????. 4. ????? ???? ?? "ListDatabases ()"???? ???? ??? ??? ??????. 5. "db.stats ()"??? ??? ?????? ??? ? ? ????.

Oracle ??????? Hadoop? ?? ? ?? ??? Oracle? ??? ??? ?? ? ???? ?? ??? Hadoop? ??? ??? ?? ? ?? ??? ???? ?????. ?? ???? ??? ?????. 1. OracleBigdataconncerce?? Hadoop??? ???? ???; 2. ??? ??? Apachesqoop? ??????. 3. Oracle? ?? ??? ??? ?? ?? Hadoop ???? ?????. 4. OracleGoldEngate? ???? ??? ???? ??????.

???? SQL ??? ??? ????. 1. CreateTable Create? CreateTableemployees (Idintprimarykey, Namevarchar (100), SalaryDecimal (10,2))? ?? ???? ?????. 2. createIndex? keateIndExIdx_nameOmployees (name)? ?? ???? ????. 3. InsertInto? InsertInto Employeees (ID, Name, Salary) ? (1, 'Johndoe', 75000.00)? ?? ???? ?????. 4. ??? ??????

?? ????? ??? ??? ?? ???? ?? ???? ????. Oracle ??????? ?? ?? ??? ????? ?? ???? ???? ?? ????. ?? ??? ??? ????. 1. SQL*Plus? ???? SYS ?? ??? ??? ????? ??????. 2. dbms_crypto ???? ?? ??? ? ??? ??????.

Oracle Database?? ??? ?? ??? ?? ???? ???? ?? ? ?? ??? ??? ? ????. Select ?? ??? ?? ? ???? ?? ?? ??? ???? ????. ??? ????? ?? ?? ??? ? ?? ???? ?? ?? ?????? ??????. ?? ?? ?? ??? ???? ?? ?? ?? ???? ?? ?? ?? ??? ????? ?? ??? ??? ? ? ????. ? ???? ?? ????? ??? ??? ??? ?? ?? ?? ? ?? ?? ??? ?? ?? ??? ??? ???????.
