DBI モジュールを使用し、Sybase DB に接続する Perl スクリプトを作成しています。ストアド プロシージャ (アクセスできないため、サンプル コードを投稿できません) を呼び出しています。データを取得すると、「error_handler: データ変換によりオーバーフローが発生しました」というエラーが表示されます。私はまだデータを取得しており、集中的な調査を行った後、列の一部のデータ型 (BigInt、nvarchar など) が原因のようです。問題は、どうすればこれを修正できるかということです。これはクライアント側で修正できますか、それともサーバー側でのみ修正できますか?
my $dbh = DBI->connect("DBI:Sybase:server=$server", $username, $password, {PrintError => 0}) or die;
$dbh->do("use $database") or die;
my $sql = &getQuery;
my $sth = $dbh->prepare($sql) or die;
$sth->execute() or die;
while ($rowRef = $sth->fetchrow_arrayref) #Error seems to occur here
{
#Parse through each row
}
問題を説明する FreeTDS 0.82 ログの一部:
_ct_bind_data(): column 7 is type 38 and has length 8
_ct_get_server_type(0)
_ct_get_client_type(type 38, user 0, size 8)
cs_convert(0x18dfed40, 0x7fff73216050, 0x18e44250, 0x7fff73215fa0, 0x18e387c0, 0x18e45a64)
_ct_get_server_type(30)
_ct_get_server_type(0)
converting type 127 (8 bytes) to type = 47 (9 bytes)
cs_convert() calling tds_convert
cs_convert() tds_convert returned 10
cs_prretcode(0)
cs_convert() returning CS_FAIL
cs_convert-result = 1