Oracle在表中有數(shù)據(jù)的情況下修改字段類型或長度的解決方法
Oracle 數(shù)據(jù)庫如何在表中有數(shù)據(jù)的情況下,修改表字段的類型或者增加表字段的長度解決方法
我們偶爾需要在已有表,并且有數(shù)據(jù)的情況下,修改其某個字段的類型或改變他的長度,但是因為表中有數(shù)據(jù),所以不可以直接修改,需要換個思路。
-- Create table create table TABLE1 ( col1 number(9), col2 char(20) );
-- 嘗試修改 -- 修改成功,因為表中無數(shù)據(jù) ALTER TABLE TABLE1 MODIFY COL1 NUMBER(10); -- 插入數(shù)據(jù) INSERT INTO TABLE1 (COL1, COL2) VALUES (1, 'test'); -- 再次嘗試修改 -- 修改失敗,因為表中已有數(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ù)會自動用空格補齊,所以謹慎使用CHAR類型,并可用TRIM()
驗證是否有符合條件的記錄。
初始表結構時,SELECT * FROM TABLE1 WHERE COL2 = 'test'
; 是沒有數(shù)據(jù)的,需要SELECT * FROM TABLE1 WHERE TRIM(COL2) = 'test'
;
-- 增加一個新字段,用于緩存原字段信息 ALTER TABLE 表名 ADD 新字段 VARCHAR(2000); -- 將原字段值復制到新字段上緩存 UPDATE 表名 SET 新字段 = 原字段; -- 現(xiàn)將原字段值清空,以便于修改字段大小 UPDATE 表名 SET 原字段 = null; -- 修改原字段 ALTER TABLE 表名 MODIFY 原字段 VARCHAR(2000); -- 將新字段值復制到原字段 UPDATE 表名 SET 原字段 = 新字段; -- 刪除字段 ALTER TABLE 表名 DROP COLUMN 新字段;
到此這篇關于Oracle在表中有數(shù)據(jù)的情況下修改字段類型或長度的文章就介紹到這了,更多相關Oracle修改字段類型或長度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
oracle中變長數(shù)組varray,嵌套表,集合使用方法
這篇文章主要介紹了oracle中變長數(shù)組varray,嵌套表,集合使用方法,需要的朋友可以參考下2016-02-02Oracle中簡單查詢、限定查詢、數(shù)據(jù)排序SQL語句范例和詳細注解
這篇文章主要介紹了Oracle中簡單查詢、限定查詢、數(shù)據(jù)排序SQL語句范例和詳細注解,對查詢語法一并做了介紹,需要的朋友可以參考下2014-07-07Zabbix監(jiān)控Oracle歸檔日志空間的全過程
本文將介紹Zabbix監(jiān)控Oracle歸檔日志空間的全過程,Zabbix是一個開源的監(jiān)控系統(tǒng),它可以監(jiān)控各種不同類型的服務器和服務,如果您想要監(jiān)控Oracle數(shù)據(jù)庫,文中是一些簡單的步驟,需要的朋友可以參考下2024-04-04