Как установить Oracle nls_date_format, используя Class :: DBI - PullRequest
0 голосов
/ 28 июля 2010

Я последовал примеру на wiki.class-dbi.com, чтобы изменить сеанс Oracle, но, похоже, он не работает. Ниже приведен фрагмент моего кода (для ясности проблемы удалены ограничения и предупреждения).

package MyDB;
use base 'Class::DBI::Oracle';

__PACKAGE__->connection('dbi:Oracle:dbname', 'user', 'password');
__PACKAGE__->db_Main->do(q[alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss']);
1;

package MyDB::TestTable;
use base MyDB;

__PACKAGE__->table('my_test_table');
__PACKAGE__->columns(.....);
1;

package main;
use MyDB;

my @foos = MyDB::TestTable->search( seq_number => 1 );
foreach my $foo ( @foos ) {
    say  $foo->created_time;
}

Однако результат равен , а не , что я ожидаю, как в гггг-мм-дд чч24: ми: сс :

Fri May 19 19:58:12 2006

Этот оператор "alter session", использующий DBI напрямую, а не CDBI, работает.

Что может быть причиной проблемы здесь?

Спасибо.

1 Ответ

0 голосов
/ 28 июля 2010

DBIx::Class обеспечивает крюк on_connect_do. Похоже, вы только начинаете с Perl ORM - вам следует перейти на хороший.

@DSN = (
    'dbi:Oracle:…',
    '…',
    '…',
    {
        AutoCommit    => 1,
        on_connect_do => [
            qq[ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'],
            qq[ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS'],
            qq[ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT  = 'YYYY-MM-DD HH24:MI:SS TZHTZM'],
        ],
    }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...