這涉及到一個問題:How to store unlimited characters in Oracle 11g?字符溢出Oracle 11g中的多列?
如果最大我需要的是8000個字符,可我只加3個VARCHAR2列,這樣我將有4列,其中每一字符2000獲得8000個字符。所以當第一列填滿時,數值會溢出到下一列等等。這個設計會有什麼不好的副作用嗎?請建議。
這涉及到一個問題:How to store unlimited characters in Oracle 11g?字符溢出Oracle 11g中的多列?
如果最大我需要的是8000個字符,可我只加3個VARCHAR2列,這樣我將有4列,其中每一字符2000獲得8000個字符。所以當第一列填滿時,數值會溢出到下一列等等。這個設計會有什麼不好的副作用嗎?請建議。
爲什麼不直接使用CLOB
列呢?我讀了你的其他鏈接,我不明白爲什麼你的DBA不喜歡這些類型的列。我的意思是,CLOB
是Oracle針對此確切目的的一個重要功能。在購買Oracle時,貴公司爲此功能付出了高昂的代價,那麼爲什麼不利用Oracle實現最充分的功能,而不是試圖提出黑客來做一些數據庫並非真正設計的功能?
也許您不用花時間嘗試設計黑客來克服由DBA創建的限制,您應該花一些時間教育您的DBA瞭解爲什麼CLOB
是解決您的問題的正確功能。
當DB具有我需要做出好設計的功能時,我不會滿意糟糕的設計。如果DBA是問題的話,那麼他們需要改變他們的觀點,或者我認爲你應該去高層管理。
我同意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行,在mytable_text使用多行,你可以插入儘可能多的文本。
對於不使用CLOB的規範化方法+1。 – DCookie 2010-06-08 16:30:59
要添加到DCP的和託尼的出色答案:
你問,如果你提出的辦法會不會有什麼不良的副作用。這裏有幾件事要考慮:
更糟 - 當搜索項跨越兩列之間的邊界時,搜索(點#1)將不起作用...點#3的+1) – 2010-06-09 01:50:42
這是一個很大的文字 - 什麼是你的使用情況,需要這麼多? – 2010-06-07 21:17:52