这与问题有关:How to store unlimited characters in Oracle 11g?
如果我需要的最大值是8000个字符,我可以再添加3个varchar2列,这样我就会有4个列,每个列有2000个字符,以获得8000个字符。因此,当第一列填满时,值将溢出到下一列,依此类推。这个设计会有什么不好的副作用吗?请建议。
答案 0 :(得分:11)
为什么不使用CLOB
列呢?我读了你的其他链接,我不明白为什么你的DBA不喜欢这些类型的列。我的意思是,CLOB
是Oracle的一个重要特性,仅用于此目的。在购买Oracle时,您的公司为该功能付出了很多钱,那么为什么不利用Oracle来获得最全面的功能,而不是试图通过黑客来做一些数据库并不是真正想做的事情呢?
也许不是花时间设计黑客来克服DBA所造成的限制,您应该花一些时间来教育您的DBA,了解为什么CLOB
是解决问题的正确功能。
当DB具有我需要设计好的功能时,我永远不会对糟糕的设计感到满意。如果DBA是问题所在,那么他们需要改变自己的观点,或者我认为你应该去高级管理层。
答案 1 :(得分:3)
我同意 dcp 您应该使用CLOB。但如果反对所有意义,你只能使用VARCHAR2列“滚动你自己的”无限文本,那么我不会通过向表中添加越来越多的VARCHAR2列来实现这一点:
create table mytable
( id integer primary key
, text varchar2(2000)
, more_text varchar2(2000)
, and_still_more_text varchar2(2000)
);
相反,我会将文本移动到一个单独的子表中,如下所示:
create table mytable
( id integer primary key
);
create table mytable_text
( id references mytable(id)
, seqno integer
, text varchar2(2000)
, primary key (id, seqno)
);
然后,您可以使用mytable_text中的许多行为每个mytable行插入尽可能多的文本。
答案 2 :(得分:2)
添加到DCP和Tony的优秀答案:
你问你提出的方法是否会产生任何不良副作用。以下是一些需要考虑的事项: