在dbicdump中设置DBI LongReadLen

问题描述 投票:0回答:2

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

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

谢谢您的帮助。

perl dbi dbix-class
2个回答
0
投票

您在DBD::Oracle中设置该参数

LongReadLen

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

DBI目前默认为80。


0
投票

DBD :: Oracle似乎没有将handle属性作为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,在这种情况下你可以通过connect_info / options以相同的方式指定sub / on_connect_do关键。

© www.soinside.com 2019 - 2024. All rights reserved.