文章詳情頁
Oracle在表中有數(shù)據(jù)的情況下修改字段類型或長度的解決方法
瀏覽:185日期:2023-03-12 15:25:12
Oracle 數(shù)據(jù)庫如何在表中有數(shù)據(jù)的情況下,修改表字段的類型或者增加表字段的長度解決方法
我們偶爾需要在已有表,并且有數(shù)據(jù)的情況下,修改其某個(gè)字段的類型或改變他的長度,但是因?yàn)楸碇杏袛?shù)據(jù),所以不可以直接修改,需要換個(gè)思路。
-- Create table create table TABLE1 ( col1 number(9), col2 char(20) );
-- 嘗試修改 -- 修改成功,因?yàn)楸碇袩o數(shù)據(jù) ALTER TABLE TABLE1 MODIFY COL1 NUMBER(10); -- 插入數(shù)據(jù) INSERT INTO TABLE1 (COL1, COL2) VALUES (1, "test"); -- 再次嘗試修改 -- 修改失敗,因?yàn)楸碇幸延袛?shù)據(jù),不允許直接操作 ALTER TABLE TABLE1 MODIFY COL2 VARCHAR2(20); -- 先緩存表 CREATE TABLE T_TABLE1 AS SELECT * FROM TABLE1; -- 刪除原表所有數(shù)據(jù) DELETE FROM TABLE1; -- 修改字段 -- 修改成功 ALTER TABLE TABLE1 MODIFY COL1 NUMBER(9); -- 修改成功 ALTER TABLE TABLE1 MODIFY COL2 VARCHAR2(20); -- 插入原數(shù)據(jù) INSERT INTO TABLE1 SELECT * FROM T_TABLE1; -- 刪除緩存表 DROP TABLE T_TABLE1;
注意,如果是CHAR類型,不足位數(shù)會(huì)自動(dòng)用空格補(bǔ)齊,所以謹(jǐn)慎使用CHAR類型,并可用TRIM()
驗(yàn)證是否有符合條件的記錄。
初始表結(jié)構(gòu)時(shí),SELECT * FROM TABLE1 WHERE COL2 = 'test'
; 是沒有數(shù)據(jù)的,需要SELECT * FROM TABLE1 WHERE TRIM(COL2) = 'test'
;
-- 增加一個(gè)新字段,用于緩存原字段信息 ALTER TABLE 表名 ADD 新字段 VARCHAR(2000); -- 將原字段值復(fù)制到新字段上緩存 UPDATE 表名 SET 新字段 = 原字段; -- 現(xiàn)將原字段值清空,以便于修改字段大小 UPDATE 表名 SET 原字段 = null; -- 修改原字段 ALTER TABLE 表名 MODIFY 原字段 VARCHAR(2000); -- 將新字段值復(fù)制到原字段 UPDATE 表名 SET 原字段 = 新字段; -- 刪除字段 ALTER TABLE 表名 DROP COLUMN 新字段;
到此這篇關(guān)于Oracle在表中有數(shù)據(jù)的情況下修改字段類型或長度的文章就介紹到這了,更多相關(guān)Oracle修改字段類型或長度內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
標(biāo)簽:
Oracle
排行榜
