Perl DBI:引用函数v/s bind_params,处理大型输入
希望了解语句处理程序的DBI::quote v/s bind_参数与处理存储过程的大型输入时的区别 环境:Perl+DBI+FreedTDS->SQL Server 示例代码1:使用函数quote() 示例代码2:将绑定参数用作CLOBPerl DBI:引用函数v/s bind_params,处理大型输入,perl,dbi,freetds,Perl,Dbi,Freetds,希望了解语句处理程序的DBI::quote v/s bind_参数与处理存储过程的大型输入时的区别 环境:Perl+DBI+FreedTDS->SQL Server 示例代码1:使用函数quote() 示例代码2:将绑定参数用作CLOB my $qry = "exec sp_toload \@XML = ?"; $xml = `cat bigfile_insrt.txt.xml.5k`; my $sth = $dbh->prepare($qry); #$sth->bind_param
my $qry = "exec sp_toload \@XML = ?";
$xml = `cat bigfile_insrt.txt.xml.5k`;
my $sth = $dbh->prepare($qry);
#$sth->bind_param(1,$xml,SQL_LONGVARBINARY);
$sth->bind_param(1,$xml,SQL_CLOB);
$sth->execute();
gets truncated to 7K bytes max for $xml
想知道为什么同时使用SQL_LONGVARBINARY或SQL_CLOB绑定_参数不能超过7K字节,而使用quote的示例1可以处理约100MB的数据如果省略对
bind_参数的调用会发生什么?如果省略对bind_参数
的调用并使用$sth->execute($xml),会发生什么
相反?相同的结果DBD::Sybase::st执行失败:服务器消息编号=9400严重性=16状态=1行=0服务器=。。。过程=。。。text=XML解析:第3行,字符7976,输入意外结束
,被截断为~7KI我不确定(我已经有一段时间没有在DBI中使用FreeTDS了),但您确定截断发生在7K左右吗?或者错误是说第1行和第2行,加上第3行的7k+字符?无论哪种方式,都要在freetds.conf
中检查text size
的值;您可以将其设置为最大值4294967295
,然后查看是否有任何效果。尝试将freetds.conf中的文本大小设置为4294967295
,但没有帮助。
my $qry = "exec sp_toload \@XML = ?";
$xml = `cat bigfile_insrt.txt.xml.5k`;
my $sth = $dbh->prepare($qry);
#$sth->bind_param(1,$xml,SQL_LONGVARBINARY);
$sth->bind_param(1,$xml,SQL_CLOB);
$sth->execute();
gets truncated to 7K bytes max for $xml