определение поддерживаемых значений ora_type - PullRequest
0 голосов
/ 18 января 2019
#!/usr/bin/perl
use diagnostics;
use DBI;
use DBI qw(:sql_types);

my $AIM_PSWD= $ENV{'AIM_PSWD'};
my $len=length($AIM_PSWD);
my $pwindex1=rindex($AIM_PSWD,'/');
my $pwindex2=rindex($AIM_PSWD,'@');

my $usr = substr($AIM_PSWD,0,$pwindex1);
my $pwd = substr($AIM_PSWD,$pwindex1+1,$pwindex2-($pwindex1+1));
my $db  = substr($AIM_PSWD,$pwindex2+1,$len-($pwindex2+1));
my $attr = {AutoCommit => 0};

my $dbh;
my $qryHandle;
my $row;
my $query = "SELECT /*+ index(T_CAPITATION_HIST I_CAPITATION_HIST) */ SAK_CAPITATION FROM AIM.T_CAPITATION_HIST WHERE SAK_CAPITATION = ?";

$dbh = DBI->connect("dbi:Oracle:$db", $usr, $pwd, $attr)
   or die "Unable to connect to $db\n";
$qryHandle = $dbh->prepare($query) or die "Unable to prepare query\n";
$qryHandle->bind_param(1, "765756556", {ora_type => SQL_VARCHAR});
$qryHandle->execute() or die "Unable to execute query\n";
if ($row = $qryHandle->fetchrow_hashref())
{
    print "query succeeded\n";
}
else
{
    print "query failed\n";
}
$qryHandle->finish();
$dbh->disconnect();
exit(0);

При выполнении этого выдается сообщение об ошибке из оператора bind_param: Uncaught исключение из кода пользователя: Невозможно связать: p1, ora_type 12 не поддерживается DBD :: Oracle в строке ./test.pl 26.

Как определить, какие значения ora_type поддерживаются?

1 Ответ

0 голосов
/ 18 января 2019

Доступные значения ora_type перечислены в https://metacpan.org/pod/DBD::Oracle#:ora_types и описаны в https://metacpan.org/pod/DBD::Oracle#ora_type, и должны быть импортированы из DBD :: Oracle, как:

use DBD::Oracle ':ora_types';

Если вы хотите передать стандартный тип SQL, который вы импортировали из DBI :sql_types, просто передайте его напрямую как тип связывания:

$qryHandle->bind_param(1, "765756556", SQL_VARCHAR);

См. https://metacpan.org/pod/DBD::Oracle#bind_param.

...