如何使用Class :: DBI设置Oracle nls_date_format

时间:2010-07-28 07:56:33

标签: perl

我按照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;
}

但结果 yyyy-mm-dd hh24:mi:ss

Fri May 19 19:58:12 2006

直接使用DBI的“alter session”语句而不是CDBI。

这可能会导致什么问题?

感谢。

1 个答案:

答案 0 :(得分:0)

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'],
        ],
    }
)