我按照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。
这可能会导致什么问题?
感谢。
答案 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'],
],
}
)