+ -
当前位置:首页 → 问答吧 → 求教一条SQL

求教一条SQL

时间:2011-12-06

来源:互联网

比如oracle中有一个表(X_TM_CONFIG)有字段CONFIG_ID NUMBER,CONFIG_VALUE CLOB--这个字段以前在4000范围内通过to_char(CONFIG_VALUE)转化为字符串好控制,现在维护有可能远远超过4000的长度,现在的要求就是把这个字段截取分段显示出来,以3500为长度分段截取
比如显示结果:
CONFIG_ID CONFIG_VALUE CONFIG_VALUE1 CONFIG_VALUE1  
1 xmlfeifdkafdifdafkaffifd(3500内)
2 iddiiiiiiiiiiiiiiiiiiiiii(3500外7000内) aaaaa
3 iddiiiiiiiiiiiiiiiiiiiiii(3500外7000外) daaaaafdfdfdafa fdfdffdf
............................
 

作者: zwei27   发布时间: 2011-12-06

必须要用数据库存吗?超过长度怎么还用数据库单个字段存 ?

作者: haoxiaoliang   发布时间: 2011-12-06

引用 1 楼 haoxiaoliang 的回复:

必须要用数据库存吗?超过长度怎么还用数据库单个字段存 ?
没办法,系统在维护,你不能改变原来的存储方式,不然工作量很大,如果这样很难,
那我可以把长度限制在7000以内,以3500为一段,超过3500拆分为二个字段显示,现在可以了吗,请高手写出来,谢谢

作者: zwei27   发布时间: 2011-12-06

substr(CONFIG_VALUE CLOB, 1, 3500), substr(CONFIG_VALUE CLOB,3501, 3500)
分段截取下不就行了?

作者: opps_zhou   发布时间: 2011-12-06

如果超过就写二个substr(CONFIG_VALUE CLOB, 1, 3500), substr(CONFIG_VALUE CLOB,3501, 3500),如果没超过就直接显示就行了,用case when

作者: zwei27   发布时间: 2011-12-06

帮写下

作者: zwei27   发布时间: 2011-12-06

写存储过程吧
大致是这样的,楼主参考下

select ceil(max(length(t.congif_value))/3500) from X_TM_CONFIG;
--CONFIG_VALUE可拆分的最大列数
SQL code

……
type value_type is table of number 
index by pls_integer;
v_value value_type;
begin

for i in 1 .. n loop
select substr(t.congif_value,(n-1)*3500+1,3500) into v_value(n) from X_TM_CONFIG;
end ;
……


作者: dws2004   发布时间: 2011-12-06