c# - oracle更改变量类型
问题描述
我使用的是代码优先方法,我认为数据库端字符串的默认类型是 nvarchar(),但我发现的是 nclob,它比 nvarchar 大,我不知道为什么。
这是我模型的一部分:
public string Name { get; set; }
public string En_Name { get; set; }
这是它的配置:
this.Property(p => p.Name).HasMaxLength(200).IsOptional();
this.Property(p => p.En_Name).HasMaxLength(50).IsOptional();
我需要它是 nvarchar 而不是 nclob
解决方案
我不会说你使用的语言。
但是,从 Oracle 的角度来看:如果列数据类型是 NCLOB,则不能只将其修改为 NVARCHAR2(如果这是您想要做的)。虽然,有办法做到这一点。这是一个例子:
SQL> create table test (col nclob);
Table created.
SQL> insert into test values ('x');
1 row created.
SQL> alter table test modify col nvarchar2(20);
alter table test modify col nvarchar2(20)
*
ERROR at line 1:
ORA-22859: invalid modification of columns
SQL>
好吧,这样行不通。所以:
- 创建一个新列(NVARCHAR2 数据类型)
- 将 NCLOB 内容放在那里
- 删除旧的 NCLOB 列
- 将新列重命名为旧列的名称
.
SQL> alter table test add col_vc nvarchar2(20);
Table altered.
SQL> update test set col_vc = dbms_lob.substr(col, 20, 1);
1 row updated.
SQL> alter table test drop column col;
Table altered.
SQL> alter table test rename column col_vc to col;
Table altered.
SQL> desc test
Name Null? Type
----------------------------------------- -------- ----------------------------
COL NVARCHAR2(20)
SQL> select * From test;
COL
--------------------
x
SQL>
现在你有一个 NVARCHAR2 列,所以 - 希望你的代码能正常工作。
如果上述方法不起作用(因为您不允许修改列的数据类型),我想其他人将不得不提供帮助。
推荐阅读
- vim - 将当前颜色保存为 vim 中的可加载颜色方案
- java - 如何暂停和重新启动自动 ejb
- python - 将二进制数据添加到 django rest 框架 API
- vue.js - 如何修改自动完成以便我只能搜索 1 个单词?
- c# - 检查块时间存在
- amazon-web-services - 无法将 S3 添加为 lambda 中的目的地
- firebase - Firestore 的 `get()` 是否算作 1 个文档读取?
- amazon-web-services - 无法使用管道聚合在 Elastic Search 中排序
- javascript - JavaScript 从第一个事件创建第二个事件
- php - 使用 PHPUnit 进行流明测试,仅 2 次测试就显示了过多的断言