CLOB 与 VARCHAR2 以及还有其他替代方案吗?

2024-04-26

我正在为我的应用程序使用 DevArt 的 dotConnect 和 Entity Developer。我已经使用实体优先功能创建了表。

我注意到许多列类型都设置为 CLOB。我只有 MySQL 和 Microsoft SQL Server 的经验,所以我不确定是否在应用程序中使用 CLOB。我做了一些阅读,发现 CLOB 用于大块数据。

问题是:

  1. 对于大多数字段(例如用户的性别(应该是 varchar (1) )或全名)使用 CLOB 是否可行?将 CLOB 字段转换为 VARCHAR2 的步骤需要删除该列然后重新创建它,并且在 DevArt 的实体资源管理器中存在错误,因此我希望尽可能避免它。Edit:我刚刚发现,如果您为字符串字段设置最大长度,它将自动成为 VARCHAR2。

  2. Oracle 中是否有 TINYTEXT 的等效项?


对于应该是 VARCHAR2(1) 的列使用 CLOB 数据类型是一个非常糟糕的主意。除了开销(实际上很小,因为 Oracle 会将

这确实看起来像是 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>

我们可以通过使用 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;
/

那么,让我们更改该列...

SQL> exec clob2vc ('T69', 'COL1', 1)

PL/SQL procedure successfully completed.

SQL> desc t69
 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------
 COL1                                               VARCHAR2(1)

SQL>

可以以通常的方式自动调用或编写脚本来调用此过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CLOB 与 VARCHAR2 以及还有其他替代方案吗? 的相关文章

随机推荐

  • 将现有 MongoDB 字符串属性转换为 BSON::ObjectId

    我在 MongoDB 中有一个文档集合 其中有一个属性被存储为字符串 如果将其保存为 BSON ObjectId 会更好 集合名称是foo该字段称为bar 拥有每个领域的最佳方式是什么bar将其现有值转换为 BSON ObjectId 的实
  • stopPropagation/prevent链接内元素的默认行为

    我试图理解当 a 中的元素出现时的行为 a have a event stopPropagation or event preventDefault 在第一种情况下 单击 div 还触发了 a 事件 将其移动到另一个页面 event sto
  • 如何在 FORMSOF Inflectional 全文搜索中获取匹配项的位置?

    我使用 CONTAINSTABLE 查询与 MS SQL Server 的全文索引引擎在文本列中进行搜索 例如 SELECT FROM MyTable INNER MERGE JOIN CONTAINSTABLE MyTable sDesc
  • 合并 ResourceDictionary 与 App.xaml

    我正在阅读有关 ResourceDictionary 的内容 并且遇到了一个令人困惑的问题 看来每个 XAML 只能有 1 个 ResourceDictionary 因此 如果我想使用多个资源字典 我可以合并资源字典 如果我可以合并字典 那
  • 从 JavaScript 中同步导入 JavaScript 文件?

    我不想弄乱我的 HTML 文件 而是想通过另一个 JavaScript 文件导入外部 JavaScript 文件 就像 import in css 在几个网站上 包括 StackOverflow 本身 我注意到向 DOM 附加脚本标签可以解
  • 缩放电缆表以适合页面宽度

    如何使用 kable 函数格式化 pdf 中的表格 因为我的输出表格宽度超过了pdf的宽度 这是一个例子 output pdf document r df lt cbind mtcars 1 5 mtcars 1 5 knitr kable
  • AJAX + SEO 快速问题

    当用户希望在页面加载之间发生效果 即旧内容淡出然后新内容返回 时 我通常按如下方式构建网站 index php about php 等
  • 如何从 kubernetes 集群内部访问主机的 localhost

    在此应用程序中 nodejs pod 在 kubernetes 内部运行 而 mongodb 本身作为 localhost 位于主机外部 这确实不是一个好的设计 但它只适用于开发环境 在生产中 将有一个单独的 mongodb 服务器 因为这
  • jQuery 中两个数组的合并、存储唯一元素和排序

    var Arr1 1 3 4 5 6 var Arr2 4 5 6 8 9 10 我正在尝试合并这两个数组 输出是 1 3 4 5 6 4 5 6 我用过 merge Arr1 Arr2 这一块将它们合并 使用警报我可以看到像上面这样的合并
  • 搜索拥有超过十亿条记录的数据库的最有效方法?

    我的客户有一个巨大的数据库 仅包含三个字段 主键 无符号数 姓名 多字文本 描述 最多 1000 个 varchar 该数据库拥有超过数十亿条条目 我以前没有处理如此大量数据的经验 他希望我设计一个使用 AJAX 如 Google 的界面来
  • 具有自托管代理的 Azure DevOps Pipeline for Java 项目

    我们有一组使用不同 JDK 版本开发的 Java 项目 项目中使用了不同版本的 Gradle 和 Maven 我们应该使用以下命令创建 Azure DevOps PipelineSelf Hosted Agent截至目前 构建代理服务器已随
  • Visual Studio 2015 - C# Windows 通用应用程序缺少程序集引用

    今天 我将我的 Windows 通用应用程序项目从 github 克隆到运行新安装的 Visual Studio 2015 的新计算机上 项目加载后 我注意到我的所有页面和属性都带有红色下划线 并且有许多错误 CS0246 C The ty
  • Microsoft 的 STL::list::sort() 使用哪种排序算法?

    注 我不小心发帖了这个问题 https stackoverflow com questions 1717773 which sorting algorithm is used by stls listsort没有指定我正在使用哪个STL实现
  • John Resig 的 Javascript 继承片段是否已弃用?

    我正在寻找一种简单的方法来创建两个类 一个类继承另一个类 子类重新定义父类的方法之一 并在新方法中调用父类的方法 例如 有一个班级Animal and Dog 其中 Animal 类定义了一个方法makeSound 它建立了如何输出声音 然
  • 如何处理Kafka流中的不同时区?

    因此 我正在评估 Kafka Streams 及其功能 看看它是否适合我的用例 因为我需要每 15 分钟 每小时 每天聚合传感器数据 并发现它由于其窗口功能而很有用 因为我可以通过应用创建窗口windowedBy on KGroupedSt
  • CSS 可调整大小的带标题的图像

    我正在尝试获取并排显示的两个图像的 HTML 布局 并填充页面 同时保持其纵横比并保持图像彼此相邻 即不在页面每一半的中心 我还想要顶部有一个标题 我几乎已经使用下面的 CSS hackery 实现了这一目标 目前它看起来像这样 如果我水平
  • 使用python远程执行shell脚本

    有没有一种方法可以让我在 Windows 上使用 Python 来执行位于远程 Unix 计算机上的 shell 脚本 P S 抱歉编辑晚了 我确实知道 Paramiko 但我想知道是否有办法在没有它的情况下做到这一点 对于初学者来说 可以
  • Roslyn 脚本:运行时异常的行号信息

    我正在摆弄 Roslyn 脚本的东西 使用Microsoft CodeAnalysis CSharp Scriptingnuget 包 我想知道是否有一种方法可以将行号信息添加到堆栈跟踪中 以了解脚本内发生的异常 当我运行以下 C 代码时
  • 如何执行更新UI视图Android的后台作业[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在我的 Android 应用程序中 我有一个带有视图的活动 例如 在活动开始或创建主布局时 我想启动一个后台作业 每 5 秒从主布局更
  • CLOB 与 VARCHAR2 以及还有其他替代方案吗?

    我正在为我的应用程序使用 DevArt 的 dotConnect 和 Entity Developer 我已经使用实体优先功能创建了表 我注意到许多列类型都设置为 CLOB 我只有 MySQL 和 Microsoft SQL Server