Oracle修改字段長(zhǎng)度及屬性的方法
Oracle數(shù)據(jù)庫(kù)使用ALTER TABLE MODIFY語(yǔ)法,修改列定義。
語(yǔ)法
alter table table_name modify(column_name 字段類型);
Oracle允許執(zhí)行多種操作,但主要有以下常用的操作:
- 修改數(shù)據(jù)列的可見性(可見或不可見)
- 修改字段允許或不允許null
- 修改字段長(zhǎng)度
- 修改列的默認(rèn)值
修改多個(gè)列語(yǔ)法如下:
ALTER TABLE table_name MODIFY ( column_name_1 字段類型, column_name_2 字段類型, ... );
舉例,仍然使用之前建立的數(shù)據(jù)庫(kù)表及數(shù)據(jù)進(jìn)行測(cè)試:Oracle中新建數(shù)據(jù)表的兩種方法(點(diǎn)擊前邊文字跳轉(zhuǎn)),不了解的自行跳轉(zhuǎn)鏈接查看,這里就在列下建表及插入數(shù)據(jù)語(yǔ)句如下:
--實(shí)例建表stuinfo_01 create table JT_CS.stuinfo_01 ( stuid varchar2(11) not null,--學(xué)號(hào):'S'+班號(hào)(7位數(shù))+學(xué)生序號(hào)(3位數(shù))(不能為空)SC200101001 stuname varchar2(50) not null,--學(xué)生姓名(不能為空) sex char(1) not null,--性別(不能為空)1(男)、2(女) age number(2) not null,--年齡(不能為空) classno varchar2(7) not null,--班號(hào):'C'+年級(jí)(4位數(shù))+班級(jí)序號(hào)(2位數(shù))(不能為空)C200101 stuaddress varchar2(100) default '地址未錄入',--地址 (不填或?yàn)榭諘r(shí)默認(rèn)填入‘地址未錄入‘) grade char(4) not null,--年級(jí)(不能為空) enroldate date,--入學(xué)時(shí)間 idnumber varchar2(18) default '身份證未采集' not null--身份證(不能為空) ) --插入測(cè)試數(shù)據(jù) INSERT INTO JT_CS.STUINFO VALUES ('SC200101001','路飛','1','19','C200101','東海哥亞王國(guó)風(fēng)車村','2001','2001/09/01','411428199602569201'); INSERT INTO JT_CS.STUINFO VALUES ('SC200101002','索隆','1','21','C200101','東海霜月村','2001','2001/09/01','411428199602569202'); INSERT INTO JT_CS.STUINFO VALUES ('SC200101003','娜美','2','20','C200101','可可西亞村','2001','2001/09/01','411428199602569203'); INSERT INTO JT_CS.STUINFO VALUES ('SC200101004','烏索普','1','19','C200101','東海西羅布村','2001','2001/09/01','411428199602569204'); INSERT INTO JT_CS.STUINFO VALUES ('SC200101005','山治','1','21','C200101','北海杰爾瑪王國(guó)','2001','2001/09/01','411428199602569205'); INSERT INTO JT_CS.STUINFO VALUES ('SC200101006','喬巴','1','15','C200101','磁鼓島','2001','2001/09/01','411428199602569206'); INSERT INTO JT_CS.STUINFO VALUES ('SC200101007','羅賓','2','30','C200101','奧哈拉','2001','2001/09/01','411428199602569207'); INSERT INTO JT_CS.STUINFO VALUES ('SC200101008','弗蘭奇','1','34','C200101','南海','2001','2001/09/01','411428199602569208'); INSERT INTO JT_CS.STUINFO VALUES ('SC200101009','布魯克','1','63','C200101','西海','2001','2001/09/01','411428199602569209'); INSERT INTO JT_CS.STUINFO VALUES ('SC200101010','甚平','1','46','C200101','魚人島','2001','2001/09/01','411428199602569210');
查詢結(jié)果數(shù)據(jù)如下:
SELECT * FROM JT_CS.STUINFO_01;
1、修改數(shù)據(jù)列的可見性(可見或不可見)
通常默認(rèn)情況下,新建表在未有任何定義的情況下表列都是可見的。我們可以在創(chuàng)建表或使用ALTER TABLE MODIFY
語(yǔ)句定義某些列不可見。
--以下語(yǔ)句將SEX列修改為不可見(適用于Oracle 12c) ALTER TABLE JT_CS.STUINFO_01 MODIFY SEX INVISIBLE; --將不可見字段修改為可見(適用于Oracle 12c) ALTER TABLE JT_CS.STUINFO_01 MODIFY SEX VISIBLE;
2. 修改字段允許或不允許null
準(zhǔn)備測(cè)試數(shù)據(jù)(先制造出一個(gè)小問題)
--測(cè)試需要,先將原來的enroldate字段路飛的入學(xué)時(shí)間置空 UPDATE JT_CS.STUINFO_01 SET enroldate='' WHERE STUID='SC200101001';
修改enroldate字段不予許為空 not null
--修改enroldate字段不予許為空 not null ALTER TABLE JT_CS.STUINFO_01 MODIFY enroldate NOT NULL;
因?yàn)閯倓偽覀兦蹇樟?ldquo;路飛”先生的入學(xué)時(shí)間,所以執(zhí)行NOTNULL時(shí)系統(tǒng)提示錯(cuò)誤,有空值存在,也就是說必須確?,F(xiàn)有數(shù)據(jù)符合新約束(也就是說,如果原來數(shù)據(jù)中存在NULL是不行的)。
為了解決這個(gè)問題,首先我們需要將enroldate字段所有為空的列進(jìn)行填充
--更新填充字段 UPDATE JT_CS.STUINFO_01 SET enroldate='2001-09-30' WHERE STUID='SC200101001' ;
然后改變enroldate列的約束:
--修改約束不允許為空(not null) ALTER TABLE JT_CS.STUINFO_01 MODIFY enroldate NOT NULL;
3. 修改字段長(zhǎng)度
--將身份證號(hào)字段長(zhǎng)度大小擴(kuò)充到20 ALTER TABLE JT_CS.STUINFO_01 MODIFY IDNUMBER VARCHAR2(20);
注意:要縮短或擴(kuò)充列的大小,請(qǐng)確保列中的所有數(shù)據(jù)都符合新的大小,否則語(yǔ)句將無法進(jìn)行執(zhí)行。
4. 修改列的默認(rèn)值
添加一個(gè)名為status的新列,默認(rèn)值為1到JT_CS.STUINFO_01表中
--添加一個(gè)新列,然后默認(rèn)值設(shè)置成 1 ALTER TABLE JT_CS.STUINFO_01 ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
將添加的新列status的默認(rèn)值修改為0
--設(shè)置成默認(rèn)值0 ALTER TABLE JT_CS.STUINFO_01 MODIFY status DEFAULT 0;
插入一條新數(shù)據(jù)進(jìn)行測(cè)試
--按指定的字段插入數(shù)據(jù) INSERT INTO JT_CS.STUINFO_01 ( STUID, STUNAME, SEX, AGE, CLASSNO, STUADDRESS, GRADE, ENROLDATE, IDNUMBER) VALUES ('SC200101011','薩博','1','46','C200101','魚人島','2000','2001/09/01','411428199602569211');
結(jié)果查詢
到此這篇關(guān)于Oracle修改字段長(zhǎng)度及屬性的文章就介紹到這了,更多相關(guān)Oracle修改字段長(zhǎng)度及屬性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle 遍歷游標(biāo)的四種方式匯總(for、fetch、while、BULK COLLECT)
這篇文章主要介紹了Oracle 遍歷游標(biāo)的四種方式匯總(for、fetch、while、BULK COLLECT),幫助大家更好的理解和使用Oracle數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-10-10Oracle如何獲取當(dāng)前庫(kù)中所有表空間創(chuàng)建的語(yǔ)句
在Oracle數(shù)據(jù)庫(kù)管理中,通過使用dbms_metadata.get_ddl函數(shù),可以方便地獲取表空間的DDL創(chuàng)建語(yǔ)句,首先利用select查詢構(gòu)造需要的DDL語(yǔ)句,然后執(zhí)行得到的查詢語(yǔ)句即可獲取對(duì)應(yīng)表空間的創(chuàng)建語(yǔ)句,這種方法適用于數(shù)據(jù)庫(kù)遷移或備份時(shí)重建表空間的需求2024-10-10EXISTS關(guān)鍵字在Oracle中的簡(jiǎn)單使用例子
在Oracle中IN和EXISTS都是用于子查詢的比較運(yùn)算符,但它們的使用方式和操作結(jié)果有所不同,這篇文章主要給大家介紹了關(guān)于EXISTS關(guān)鍵字在Oracle中的簡(jiǎn)單使用,需要的朋友可以參考下2024-04-04Oracle執(zhí)行計(jì)劃及性能調(diào)優(yōu)詳解使用方法
在Oracle數(shù)據(jù)庫(kù)中,通過使用EXPLAIN PLAN、AWR、SQL Trace等工具可以對(duì)SQL性能進(jìn)行詳細(xì)分析,EXPLAIN PLAN可以展示SQL執(zhí)行計(jì)劃和關(guān)鍵性能指標(biāo)如操作類型、成本、行數(shù)等,本文給大家介紹Oracle執(zhí)行計(jì)劃及性能調(diào)優(yōu)詳解使用方法,感興趣的朋友跟隨小編一起看看吧2024-09-09Oracle的CLOB大數(shù)據(jù)字段類型操作方法
VARCHAR2既分PL/SQL Data Types中的變量類型,也分Oracle Database中的字段類型,不同場(chǎng)景的最大長(zhǎng)度不同。接下來通過本文給大家分享Oracle的CLOB大數(shù)據(jù)字段類型操作方法,感興趣的朋友一起看看吧2017-08-08oracle數(shù)據(jù)庫(kù)中如何處理clob字段方法介紹
在知識(shí)庫(kù)的建立的時(shí)候,用普通VARCHAR2存放文章是顯然不夠的,本文將詳細(xì)將介紹oracle數(shù)據(jù)庫(kù)中如何處理clob字段方法,需要的朋友可以參考下2012-11-11EF 配置Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)連接字符串的實(shí)例
下面小編就為大家?guī)硪黄狤F 配置Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)連接字符串的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04Oracle數(shù)據(jù)庫(kù)游標(biāo)連接超出解決方案
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)游標(biāo)連接超出解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07