如果安裝了oracle軟件最好,直接編輯就行了了,沒有安裝那么就alter table tablename rename column columnname to newcolumnname;在或者把columnname刪除,在增加newcolumnname列。alter table tablename drop column columnname;alter table tablename add column newcolumnname;
成都創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)按需設(shè)計(jì),是成都網(wǎng)站推廣公司,為戶外休閑椅提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開發(fā)等。成都網(wǎng)站推廣熱線:028-86922220
添加字段并附值
alter table TABLE_NAME ADD COLUMN_NAME NUMBER(1) DEFAULT 1;修改字段值update TABLE_NAME set filedname=value where filedname=value;
修改字段數(shù)據(jù)類型
alter table tablename modify filedname varchar2(20);1SQLselect*fromv$version;23BANNER4--------------------------------------------------------------------------------5OracleDatabase11g Enterprise Edition Release11.2.
0.1.0-64bitProduction6PL/SQL Release11.2.
0.1.0-Production7CORE11.2.
0.1.0Production8TNSforLinux: Version11.2.
0.1.0-Production9NLSRTL Version11.2.
0.1.0-Production
1.修改字段數(shù)據(jù)類型時(shí),如果該列有數(shù)據(jù)則報(bào)ORA-01439: column to be modified must be empty to change datatype,此時(shí)需要通過另外一種方法修改:1SQLaltertablezytaddid_tempvarchar2(10);23Tablealtered.45SQLcommit;67Commitcomplete.89SQLselect*fromzyt;1011NAME ID ID_TEMP12---------- ---------- ----------13zyt1114david21516SQLaltertablezyt renamecolumnidtoid_bak;1718Tablealtered.1920SQLselect*fromzyt;2122NAME ID_BAK ID_TEMP23---------- ---------- ----------24zyt1125david22627SQLdesczyt;28NameNull? Type29----------------------------------------- -------- ----------------------------30NAMEVARCHAR2(10)31ID_BAKNOTNULLNUMBER(2)32ID_TEMPVARCHAR2(10)3334SQLupdatezytsetID_TEMP=cast(ID_BAKasvarchar2(10));35362rows updated.3738SQLcommit;3940Commitcomplete.4142SQLselect*fromzyt;4344NAME ID_BAK ID_TEMP45---------- ---------- ----------46zyt11147david224849SQLaltertablezytdropcolumnID_BAK;5051Tablealtered.5253SQLcommit;5455Commitcomplete.5657SQLselect*fromzyt;5859NAME ID_TEMP60---------- ----------61zyt1162david26364SQLdesczyt;65NameNull? Type66----------------------------------------- -------- ----------------------------67NAMEVARCHAR2(10)68ID_TEMPVARCHAR2(10)備注:這種方法能滿足需求,因新增字段默認(rèn)添加到表末尾,有可能發(fā)生行遷移,對(duì)應(yīng)用程序會(huì)產(chǎn)生影響,同時(shí)也涉及復(fù)雜數(shù)據(jù),不算最好的方法
2.建立一個(gè)中間跳板,臨時(shí)存儲(chǔ)數(shù)據(jù)1SQLdesczyt;2NameNull? Type3----------------------------------------- -------- ----------------------------4NAMEVARCHAR2(10)5IDVARCHAR2(10)67SQLselect*fromzyt;89NAME ID10---------- ----------11zyt1112david21314SQLaltertablezytaddid_tempVARCHAR2(10)1516Tablealtered.1718SQLselect*fromzyt;1920NAME ID ID_TEMP21---------- ---------- ----------22zyt1123david22425SQLupdatezytsetID_TEMP=id,id=null;26272rows updated.2829SQLselect*fromzyt;3031NAME ID ID_TEMP32---------- ---------- ----------33zyt1134david23536SQLaltertablezyt modify idnumber(10);3738Tablealtered.3940SQLdesczyt;41NameNull? Type42----------------------------------------- -------- ----------------------------43NAMEVARCHAR2(10)44IDNUMBER(10)45ID_TEMPVARCHAR2(10)4647SQLupdatezytsetid=ID_TEMP,ID_TEMP=null;48492rows updated.5051SQLselect*fromzyt;5253NAME ID ID_TEMP54---------- ---------- ----------55zyt1156david25758SQLaltertablezytdropcolumnID_TEMP;5960Tablealtered.6162SQLcommit;6364Commitcomplete.6566SQLselect*fromzyt;6768NAME ID69---------- ----------70zyt1171david27273SQLdesczyt;74NameNull? Type75----------------------------------------- -------- ----------------------------76NAMEVARCHAR2(10)77IDNUMBER(10)備注:第二種方法,是增加一個(gè)與被修改的列類型一樣的列,之后將要修改列的數(shù)據(jù)復(fù)制到新增的列并置空要修改的列,之后修改數(shù)據(jù)類型,再從新增列將數(shù)據(jù)拷貝回來,該過程涉及兩次數(shù)據(jù)復(fù)制,如果是數(shù)據(jù)量很多,會(huì)比較慢同時(shí)也會(huì)產(chǎn)生很多undo和redo;優(yōu)點(diǎn)是數(shù)據(jù)不會(huì)發(fā)生行遷移。
分為兩步來實(shí)現(xiàn),首先插入數(shù)據(jù),假設(shè)表T,有字段col1,col2,col3,需要向前200行的col2插入行數(shù)+1的值,并將col2變?yōu)榈谝涣校?/p>
插入數(shù)據(jù)有兩種方法:
1》直接update即:UPDATE T SET T.COL2 = ROWNUM + 1 WHERE ROWNUM =200;
2》寫一個(gè)存儲(chǔ)過程
CREATE OR REPLACE PROCEDURE INS IS
BEGIN
FOR I IN 1 .. 200 LOOP
INSERT INTO T (COL2) VALUES (I);
END LOOP;
COMMIT;
END;
編譯并運(yùn)行該過程,插入列即完成。
下面將COL2列調(diào)整為第一列:
方法一:借用臨時(shí)表,建temp表與t表的表結(jié)構(gòu)、數(shù)據(jù)完全一致,重建t表,調(diào)整字段順序,再將temp表的數(shù)據(jù)導(dǎo)回來,即
CREATE TABLE TEMP AS SELECT * FROM T;
CREATE TABLE T(
COL2 TYPE,
COL1 TYPE,
COL3 TYPE
);
INSERT INTO T
SELECT COL2,COL1,COL3 FROM TEMP;
COMMIT;
DROP TABLE TEMP;
此方法需要足夠的空間、回滾段和時(shí)間消耗
方法2:利用數(shù)據(jù)庫表對(duì)象更新字段的序列號(hào)
在當(dāng)前表用戶下使用下面命令查詢T對(duì)象的編號(hào):
select OBJECT_name,object_id from all_objects where object_name='T';(注意一定要大寫)
SQL /
OBJECT_NAME OBJECT_ID
------------------------------ ----------
T 50555
切換到sys帳號(hào)下
select obj#,col#,name from col$ where obj#=50555;
OBJ# COL# NAME
---------- ---------- ----------------------------
50555 1 COL1
50555 2 COL2
50555 3 COL3
Elapsed: 00:00:00.03
下面可以通過修改這個(gè)系統(tǒng)表來實(shí)現(xiàn)修改列名與順序,注意,COL#就是列的順序。
UPDATE COL$ SET COL#=2 WHERE OBJ#=50555 and name='COL1';
UPDATE COL$ SET COL#=1 WHERE OBJ#=50555 and name='COL2';
再次查詢
select obj#,col#,name from col$ where obj#=50555;
OBJ# COL# NAME
---------- ---------- ------------------------------
50555 1 COL2
50555 2 COL1
50555 2 COL3
提交修改commit ;
重啟服務(wù)
SQL SHUTDOWN IMMEDIATE
SQLSTARTUP
重新登錄表用戶下,查詢SELECT * FROM T;
COL2 COL1 COL3
至此列順序調(diào)整成功
最好的方法是批量修改,即每次修改5000條(一次修改不要超過一萬條,否則影響性能). 雖然在11g中,我們也可以選擇使用merge命令,但你的這種情況最好先修改一部分然后看看影響,畢竟在生產(chǎn)環(huán)境作這樣的操作風(fēng)險(xiǎn)很大。如果是誤操作,最好還是請(qǐng)DBA來恢復(fù),雖然這樣做會(huì)被挨罵,但總比錯(cuò)上加錯(cuò),最后連挨罵的機(jī)會(huì)都沒有要好得多。如果對(duì)這些修改真的有信心,而只是從性能考慮,那可以用下面的方法(pk_col 是表的主鍵
1、構(gòu)建臨時(shí)表進(jìn)行主鍵關(guān)聯(lián)更新
需求:T1表有千萬級(jí)別的數(shù)據(jù)量,需要更新這個(gè)表的字段a,b滿足2個(gè)條件的記錄。
做法:一般業(yè)務(wù)會(huì)將條件通過excel表格提供給開發(fā),那么開發(fā)首先需要將這個(gè)excel表格的內(nèi)容插入到臨時(shí)表T2中,考慮到a,b都不是主鍵,那么需要將a,b轉(zhuǎn)化成主鍵后再插入到T2表中,T2表中還可以保存更新前的數(shù)據(jù),方便做數(shù)據(jù)回滾,T2表中有數(shù)據(jù)后,就可以執(zhí)行下面腳本進(jìn)行更新操作:
ps:c,d是需要更新的操作,e,f是條件。必須強(qiáng)調(diào)的是id必須是主鍵
1、構(gòu)建臨時(shí)表進(jìn)行主鍵關(guān)聯(lián)更新
需求:T1表有千萬級(jí)別的數(shù)據(jù)量,需要更新這個(gè)表的字段a,b滿足2個(gè)條件的記錄。
做法:一般業(yè)務(wù)會(huì)將條件通過excel表格提供給開發(fā),那么開發(fā)首先需要將這個(gè)excel表格的內(nèi)容插入到臨時(shí)表T2中,考慮到a,b都不是主鍵,那么需要將a,b轉(zhuǎn)化成主鍵后再插入到T2表中,T2表中還可以保存更新前的數(shù)據(jù),方便做數(shù)據(jù)回滾,T2表中有數(shù)據(jù)后,就可以執(zhí)行下面腳本進(jìn)行更新操作:
ps:c,d是需要更新的操作,e,f是條件。必須強(qiáng)調(diào)的是id必須是主鍵
如果列名不適合,那么可以使用alter
table語句的rename
column子句改變列名。語法如下:
alter
table
table_name
rename
column
column_name
to
new_column_name;
你這一題該是
alter
text
rename
textpass
to
password
去試下!
你可以先把類型為varchar的字段該名,再加以個(gè)字段為要該為date的字段名相同, 二, 1,測(cè)試表create table TEST(ID NUMBER not null, NAME VARCHAR2(20))ALTER TABLE SCOTT.TEST RENAME TO TEST1--修改表名 ALTER TABLE SCOTT.TEST RENAME COLUMN NAME TO NAME1 --修改表列名 ALTER TABLE SCOTT.TEST MODIFY NAME1 NUMBER(20) --修改字段類型 ALTER TABLE SCOTT.TEST ADD ADD RESS VARCHAR2(40) --添加表列 ALTER TABLE SCOTT.TEST DROP COLUMN RESS--刪除表列三, ALTER TABLE gtsysusr.SCHEDULE_CONTENTS MODIFY CONTENTS_ID NVARCHAR2(64) 另建一個(gè)表,把varchar改成date,然后用SQL轉(zhuǎn)一下插入,然后刪除原表,然后改目標(biāo)表名字。應(yīng)該可以了。 四,