我正在尝试使用EF 6迁移在oracle中将CLOB列更改为VARCHAR(2000)。当EF支持迁移文件时,我在 Up()方法中有以下代码行:
AlterColumn("MTA.PLAN_SHEETS", "PLANSHEET_NAME", c => c.String(maxLength: 2000, unicode: false));
当我运行迁移时,我收到此错误
无效修改列
我知道在Oracle中我们无法直接将Clob更改为Varchar:
How to change a dataype CLOB TO VARCHAR2(sql)
在Entity Framework迁移中将Clob更改为Varchar的最佳方法是什么?
答案 0 :(得分:1)
可能所有RDBMS都存在同样的问题。 我总是使用类似于此的代码,我认为(我很确定)这是唯一的方法。
AddColumn("MTA.PLAN_SHEETS", "TMP_COLUMN", c => c.String(maxLength: 2000, unicode: false));
Sql(@"UPDATE MTA.PLAN_SHEETS SET TMP_COLUMN = PLANSHEET_NAME");
DropColumn("MTA.PLAN_SHEETS", "PLANSHEET_NAME");
RenameColumn("MTA.PLAN_SHEETS", "TMP_COLUMN", "PLANSHEET_NAME");
答案 1 :(得分:0)
你可以使用
dbms_lob.substr(clob_column,for_how_many_bytes,from_which_byte);
例如:
从T中选择dbms_lob.substr(x,4000,1);