Perl DBI регистронезависимые методы - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь сделать подпрограмму selectall_arrayref из DBI для возврата нечувствительных к регистру ключей хеша.Например:

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 для Oracle и DBD :: Sybase для Microsoft SQL Server.
Спасибо,

1 Ответ

2 голосов
/ 17 мая 2019

Вы не можете. В Perl нет строк без учета регистра.

Самое близкое, что вы могли бы получить, это использовать NAME_lc, а затем передать каждое значение через lc, прежде чем пытаться использовать его в качестве имени ключа.

...