Ext*_*kun 11 oracle devart oracle11g dotconnect
我正在为我的应用程序使用DevArt的dotConnect和Entity Developer.我使用Entity-First功能创建了表格.
我注意到许多列类型都设置为CLOB.我只有MySQL和Microsoft SQL服务器的经验,所以我不确定是否将CLOB用于该应用程序.我做了一些阅读,发现CLOB用于大量数据.
问题是:
在大多数字段中使用CLOB,例如用户的性别(应该是varchar(1))还是全名,可行吗?将CLOB字段转换为VARCHAR2的步骤需要删除列然后重新创建它,并且在DevArt的实体资源管理器中有问题,所以我想尽可能避免使用它.编辑:我刚刚发现,如果为字符串字段设置最大长度,它将自动为VARCHAR2.
Oracle中的TINYTEXT是否有任何等价物?
APC*_*APC 18
对于应该是VARCHAR2(1)的列使用CLOB数据类型是一个非常糟糕的主意.除了开销(实际上是最小的,因为Oracle将处理<4000个字符的内联CLOB作为VARCHAR2),我们应该始终努力在模式中使用最准确的数据表示:这只是一个好习惯.
这似乎是DevArt工具的问题,或者您对如何使用它的理解(没有冒犯).应该有一些方法可以指定实体属性的数据类型和/或将这些规范映射到Oracle的物理数据类型的方法.如果这看起来有点模糊,我很抱歉,我不熟悉这个产品.
所以,这是基本问题:
SQL> desc t69
Name Null? Type
----------------------------------------- -------- --------
COL1 CLOB
SQL>
SQL> alter table t69 modify col1 varchar2(1)
2 /
alter table t69 modify col1 varchar2(1)
*
ERROR at line 1:
ORA-22859: invalid modification of columns
SQL>
Run Code Online (Sandbox Code Playgroud)
我们可以通过使用DDL来改变表结构来修复它.因为模式有许多这样的列,所以值得自动化该过程.此函数删除现有列并将其重新创建为VARCHAR2.它提供了将CLOB列中的数据迁移到VARCHAR2列的选项; 你可能不需要这个,但它是完整的.(这不是生产质量代码 - 它需要错误处理,管理NOT NULL约束等)
create or replace procedure clob2vc
( ptab in user_tables.table_name%type
, pcol in user_tab_columns.column_name%type
, pcol_size in number
, migrate_data in boolean := true )
is
begin
if migrate_data
then
execute immediate 'alter table '||ptab
||' add tmp_col varchar2('|| pcol_size|| ')';
execute immediate
'update '||ptab
||' set tmp_col = substr('||pcol||',1,'||pcol_size||')';
end if;
execute immediate 'alter table '||ptab
||' drop column '|| pcol;
if migrate_data
then
execute immediate 'alter table '||ptab
||' rename column tmp_col to '|| pcol;
else
execute immediate 'alter table '||ptab
||' add '||pcol||' varchar2('|| pcol_size|| ')';
end if;
end;
/
Run Code Online (Sandbox Code Playgroud)
那么,让我们改变那一栏......
SQL> exec clob2vc ('T69', 'COL1', 1)
PL/SQL procedure successfully completed.
SQL> desc t69
Name Null? Type
----------------------------------------- -------- ---------------
COL1 VARCHAR2(1)
SQL>
Run Code Online (Sandbox Code Playgroud)
调用此过程可以通过常规方式自动化或编写脚本.
像Gender列一样使用CLOB 至少会非常不寻常.如果此工具生成的DDL指定LOB数据应该内联存储而不是脱节,我不希望出现任何可怕的性能问题.但是,您可能会为访问数据库的其他工具创建问题,这些工具不能很好地处理LOB.
在Oracle Tinytext中没有与Oracle相同的东西.CLOB是CLOB.
| 归档时间: |
|
| 查看次数: |
20351 次 |
| 最近记录: |