关于Perl DBI的LongTruncOk属性

本文介绍了使用Perl DBI处理数据库中长字段(如LOB类型)时遇到的问题及解决方案,包括如何通过设置LongTruncOk属性避免截断错误。

       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}属性。

  

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值