首页 > 解决方案 > 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

标签: c#asp.net-mvcoracleoracle12c

解决方案


我不会说你使用的语言。

但是,从 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 列,所以 - 希望你的代码能正常工作。

如果上述方法不起作用(因为您不允许修改列的数据类型),我想其他人将不得不提供帮助。


推荐阅读