【发布时间】:2019-10-04 13:30:36
【问题描述】:
我正在尝试使 DBI 中的 selectall_arrayref 子例程返回不区分大小写的哈希键。例如:
my $dbh = DBI->connect('dbi:Oracle:' . 'host','user','pass',
{
RaiseError => 1,
PrintError => 0,
AutoCommit => 1
}
) || die( $DBI::errstr . "\n" );
$dbh->do('alter session set NLS_COMP=LINGUISTIC'); # this doesn't work
$dbh->do('alter session set NLS_SORT=BINARY_CI'); # this doesn't work
my $query = 'select test_id from test_table';
my $result = $dbh->selectall_arrayref($query, {Slice=>{}});
print(@$result[0]->{TEST_ID}); #works
print(@$result[0]->{test_id}); #does not work but I want to make it work
print(@$result[0]->{tEsT_Id}); #does not work but I want to make it work
我知道 DBI 有这个设置:
$dbh->{FetchHashKeyName} = 'NAME_uc' #upper case keys
$dbh->{FetchHashKeyName} = 'NAME_lc' #lower case keys
$dbh->{FetchHashKeyName} = 'NAME' #default
是的,如果我设置其中之一,它适用于相应的情况,但我想以某种方式重写 selectall_arrayref 子例程以返回不敏感的键,所以我可以使用小写、大写或组合的小写和大写。
我怎样才能实现这样的目标?
我也有兴趣在 DBI 的其他子程序上实现这一点。
我目前使用 DBD::Oracle for Oracle 和 DBD::Sybase for Microsoft SQL Server。
谢谢,
【问题讨论】: