use*_*262 12 oracle types blob clob oracle11g
我们在Oracle 11g中有一个带有varchar2列的表.我们使用专有的编程语言,其中此列定义为字符串.最大值我们可以在此列中存储2000个字符(4000个字节).现在要求是列需要存储超过2000个字符(实际上是无限字符).出于维护原因,DBA不喜欢BLOB或LONG数据类型.
我能想到的解决方案是从原始表中删除此列,并为此列创建一个单独的表,然后将每个字符存储在一行中,以获得无限制的字符.此tble将与原始表连接以进行查询.
有没有更好的解决方案来解决这个问题?
更新:专有编程语言允许定义string和blob类型的变量,没有CLOB选项.我理解给出的回复,但我无法接受DBA.我明白偏离BLOB或LONG将是开发人员的噩梦,但仍然无法帮助它.
更新2:如果我需要的最大值是8000个字符,我可以再添加3个列,这样我就会有4个列,每个列有2000个字符,可以获得8000个字符.因此,当第一列填满时,值将溢出到下一列,依此类推.这个设计会有什么不好的副作用吗?请建议.
您可以按照Oracle在信息模式中存储其存储过程的方式.定义一个名为text columns的表:
CREATE TABLE MY_TEXT (
IDENTIFIER INT,
LINE INT,
TEXT VARCHAR2 (4000),
PRIMARY KEY (INDENTIFIER, LINE));
Run Code Online (Sandbox Code Playgroud)
标识符列是原始表的外键.Line是一个简单的整数(不是序列),用于保持文本字段的顺序.这允许保留更大的数据块
是的,这不如blob,clob或LONG那么高效(如果可能的话,我会避免使用LONG字段).是的,这需要更多的维护,如果你的DBA是针对管理数据库中的CLOB字段设置的,那么这是选项二.
编辑:
下面的My_Table是您当前要扩展的VARCHAR列的位置.我会把它保存在短文本字段的表中.
CREATE TABLE MY_TABLE (
INDENTIFER INT,
OTHER_FIELD VARCHAR2(10),
REQUIRED_TEXT VARCHAR(4000),
PRIMERY KEY (IDENTFIER));
Run Code Online (Sandbox Code Playgroud)
然后编写查询以拉取数据连接两个表,在MY_TEXT字段中按LINE排序.您的应用程序需要将字符串拆分为2000个字符块并按行顺序插入它们.
我会在PL/SQL过程中执行此操作.插入和选择.PL/SQL VARCHAR字符串最多可以为32K字符.哪个可能足够大,也可能不足以满足您的需求.
但是,与其他所有回答此问题的人一样,我强烈建议向DBA提出一个案例,使该列成为CLOB.从程序的角度来看,这将是一个BLOB,因此易于管理.
| 归档时间: |
|
| 查看次数: |
38260 次 |
| 最近记录: |