我們使用char(1)
列來存儲Oracle中的布爾值,其值爲"1"
或"0"
以表示true或false。但是,我想將其更改爲number(1)
列,其中值爲1
或0
。看起來如果表中已有值,則不能更改此列的類型。所以我必須這樣做:有沒有辦法在Oracle中將所有char(1)列更改爲number(1)列?
ALTER TABLE TPM_TRAININGPLANSOLUTIONS DROP CONSTRAINT SYS_C0010178;
ALTER TABLE TPM_TRAININGPLANSOLUTIONS RENAME COLUMN ISMARKERCOMPLETION TO ISMARKER_CHAR;
ALTER TABLE TPM_TRAININGPLANSOLUTIONS ADD (ISMARKERCOMPLETION NUMBER(1) NOT NULL);
UPDATE TPM_TRAININGPLANSOLUTIONS SET ISMARKERCOMPLETION = ISMARKER_CHAR; -- This takes about 10 min
ALTER TABLE TPM_TRAININGPLANSOLUTIONS DROP COLUMN ISMARKER_CHAR; -- Also very slow
ALTER TABLE TPMDBO.TPM_TRAININGPLANSOLUTIONS
ADD (CONSTRAINT SYS_C0010178
CHECK (ISMARKERCOMPLETION in (0,1))
NOT DEFERRABLE INITIALLY IMMEDIATE VALIDATE);
但是,我們在我們的數據庫中有很多這些列。有沒有更快的方法來做到這一點?
出於好奇,你爲什麼要這麼做?原因? – shahkalpesh 2013-05-10 20:22:13
@shahkalpesh - 好問題。 .NET Entity Framework將'number(1)'映射到布爾值,其中'char(1)'映射到一個String。 – 2013-05-10 20:24:17
消息很明確,我認爲你正在做的是唯一的解決方案... – Sebas 2013-05-10 20:25:16