在dbicdump中设置DBI LongReadLen

时间:2017-12-27 09:46:22

标签: perl dbi dbix-class

我试图转储我的Oracle架构,但不幸的是遇到了ORA-24345错误。从我的阅读看起来我需要在数据库句柄上设置LongReadLen选项。

但是,我找不到在dbicdump中设置此参数的方法。感谢任何帮助。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以在DBD::Oracle

中设置该参数
  

LongReadLen

     

要检索的long或longraw列的最大大小。如果其中一列长于LongReadLen,则会引发数据截断错误(LongTrunkOk为false)或者将以静默方式截断列(LongTruncOk为true)。

     

DBI目前默认为80。

答案 1 :(得分:0)

DBD :: Oracle似乎没有将句柄属性作为connect的参数,这使得这有点困难,但幸运的是DBIC和dbicdump有办法解决它。像这样运行dbicdump:

dbicdump <options> dbi:Oracle:blah username password \
'{ on_connect_do => sub { shift->_dbh->{LongReadLen} = 123456 }'

dbicdump识别额外参数(在DSN,用户名和密码之后)是否看起来像perl数据结构或子例程,如果是这样,则通过eval运行它,并且DBIx :: Class :: Storage :: DBI具有on_connect_do,无论何时建立连接,它都可以针对句柄运行SQL或任意代码。在这种情况下,我们可以使用它将LongReadLen attr设置为您想要的任何值。

如果你使用1-arg版本的dbicdump从配置文件中获取选项,你可能会运气不好,除非你的加载器是Config::Any::Perl,在这种情况下你可以指定sub相同方式,通过connect_info / options / on_connect_do密钥。