oracle中varchar2字段转clob字段(读取方法为PHP)
来源:互联网 发布:淘宝产品权重 编辑:程序博客网 时间:2024/06/03 04:06
系统中有一个表的字段(如:content)是varchar2类型(最多只能存储4000字符),不够用了,因此将其改为clob类型(支持4G存储量)。
如果该字段content列不为空的话,不能直接通过sql语句修改其字段类型,会报ORA-22858的错误,如图所示:
解决方法:
1.首先创建一个clob的临时字段:
1
alter
table
table_name
add
(tmp clob);
2.然后将content字段内容全部复制到tmp字段中,具体方法请见:
http://my.oschina.net/guyfar/blog/73829
3.修改content字段名为content_bak,将tmp的字段名改为content即可。
1
alter
table
table_name rename
column
content
to
content_bak;
2
3
alter
table
table_name rename
column
tmp
to
content;
到这里就完成了字段类型的转换。
虽然数据类型已经转换完成,会发现调用此字段的程序会报错。那是因为通过sql查询出的clob字段是对象类型,因此会报错。
我是通过存储过程来调用的,存储过程如下:
01
create
or
replace
function
getclob(
02
03
table_name
in
varchar2,
04
05
field_id
in
varchar2,
06
07
field_name
in
varchar2,
08
09
v_id
in
number,
10
11
v_pos
in
number)
return
varchar2
12
13
is
14
15
lobloc clob;
16
17
buffer varchar2(32767);
18
19
amount number := 2000;
20
21
offset number := 1;
22
23
query_str varchar2(1000);
24
25
begin
26
27
query_str :=
'select '
||field_name||
' from '
||table_name||
' where '
||field_id||
'= :id '
;
28
29
--initialize buffer with data to be found
30
31
EXECUTE
IMMEDIATE query_str
INTO
lobloc USING v_id;
32
33
offset:=offset+(v_pos-1)*2000;
34
35
--read 2000 varchar2 from the buffer
36
37
dbms_lob.
read
(lobloc,amount,offset,buffer);
38
39
return
buffer;
40
41
exception
42
43
when
no_data_found
then
44
45
return
buffer;
46
47
end
;
调用存储过程的PHP方法:
01
function
edt_disp_getclob(
$id
,
$field_id
,
$field_name
,
$len
) {
02
$a
= 2000;
03
$b
=
$a
/ 2;
04
if
((
$len
%
$b
) == 0) {
05
$maxpage
=
floor
(
$len
/
$a
);
06
}
else
{
07
$maxpage
=
floor
(
$len
/
$a
) + 1;
08
}
09
$i
= 0;
10
$con
=
""
;
11
$a
=
new
DB_Sql ();
12
while
(
$i
<
$maxpage
) {
13
$i
=
$i
+ 1;
14
$sql
=
"select getclob('table_name','$field_id','$field_name','$id','$i') as h from dual"
;
15
//echo $sql."<BR>";exit;
16
$a
->query (
$sql
);
17
if
(
$a
->next_record ()) {
18
$h
=
$a
->Record [
"h"
];
19
}
20
$con
=
$con
.
$h
;
21
}
22
if
(!
empty
(
$con
)) {
23
$a
->disconnect ();
24
}
25
return
$con
;
26
}
调用:
1
$con
= edt_disp_getclob(
$id
,
'id'
,
'con'
,
$con_len
);
参数说明:
$id :要查询的行
id :按ID查询
con :字段名称
$con_len :要查询的字段长度(提前通过sql查出)
将oracle中的varchar2修改为clob:
alter table t_hzoa_sys_alert add texts clob;
update t_hzoa_sys_alert t set t.texts=t.receiveuserid;
alter table t_hzoa_sys_alert drop column receiveuserid;
alter table t_hzoa_sys_alert rename column texts to receiveuserid;
alter table t_hzoa_sys_alert add texts clob;
update t_hzoa_sys_alert t set t.texts=t.receiveuserid;
alter table t_hzoa_sys_alert drop column receiveuserid;
alter table t_hzoa_sys_alert rename column texts to receiveuserid;
0 0
- oracle中varchar2字段转clob字段(读取方法为PHP)
- oracle中varchar2字段转clob字段,并提供读取方法。
- oracle字段从varchar2转化为clob
- [Oracle]varchar2替换为clob(该字段中已有大量数据)
- 通过dbms_lob.substr()转换clob字段为varchar2类型
- 转换CLOB字段类型为VARCHAR2
- 转换CLOB字段类型为VARCHAR2
- JAVA中读取ORACLE的CLOB字段
- java读取Oracle中Clob字段
- oracle中修改已有字段数据类型为clob的方法以及ssh框架中如何保存clob字段
- 将oracle字段,由varchar2类型变更为clob类型,报错
- Oracle中字段为varchar2类型的排序......
- Java中读取Oracle中Clob字段的两种方法
- Oracle CLOB字段处理方法
- 将varchar2类型的字段修改为clob类型
- Oracle中Clob与Blob字段的读取
- Oracle中Clob与Blob字段的读取
- Oracle中Clob与Blob字段的读取
- Spring AOP注解配置
- Http解析(httppaser.jar)
- eclipse中编辑文本的字体大小设置
- xerces解析和创建xml文件
- Linux内核启动分析(一)
- oracle中varchar2字段转clob字段(读取方法为PHP)
- 真相了!关于“写书”这件事
- Palindromes
- 网站的评判标准
- NodeJS无所不能:细数10个令人惊讶的NodeJS开源项目
- BSS段、数据段、代码段、堆与栈
- Artificial Intelligence?
- 十七周——字符串长度
- oracle学习.数据库实例的用户创建以及创建连接