DBI的两个高级属性
1.LongTruncOK -- 是否允许载断返回值
如果返回值(如Long或LOB类型)的值大于缓冲区的长度, 有两个选项, 一种是报错, 另一种是只取缓冲区的长度的值, 丢弃后面的值. 设为True, 则不报错而只取一部份值, 设为False则报错。
$dbh->{LongTruncOk} = true;
2.LongReadLen -- 指定Long或LOB缓冲的最长大度
在数据库中, Long或LOB类型可以存放2GB或更多的值, 在Perl应用程序去取这些值时, 必须要指定一个最大的缓冲区大小, 和LongTruncOk配合, 可以取出一定长度的值。
$dbh->{LongReadLen} = 1048576;
今天在测试程序时,遇到了这样的错误:
DBD::Oracle::st fetchrow_hashref failed: ERROR fetching field 4 of 3. LOB value truncated from 189 to 80. DBI attribute LongReadLen too small and/or LongTruncOk not set [for Statement "SELECT LINKNO,CFGPARACODE,PARAVALUE FROM SERVCFGTASKPARA WHERE TASKID = 15 "] at /slview/nms//lib2/DevConfig.pl line 636.
原因:SERVCFGTASKPARA 表有一个clob字段值很长,程序报错。
解决办法:在查询语句前加 $dbh->{LongTruncOk} = true;即可 不用设置$dbh->{LongReadLen}属性。
本文介绍了使用Perl DBI处理数据库中长字段(如LOB类型)时遇到的问题及解决方案,包括如何通过设置LongTruncOk属性避免截断错误。

3737

被折叠的 条评论
为什么被折叠?



