我正在尝试转储我的Oracle模式,但不幸地遇到了ORA-24345错误。根据我的阅读,我似乎需要在数据库句柄上设置LongReadLen选项。
但是,我找不到在dbicdump中设置此参数的方法。感谢大家在这方面的帮助。
谢谢你的帮助。
发布于 2017-12-27 18:00:23
您可以在DBD::Oracle中设置该参数
LongReadLen
要检索的long或longraw列的最大大小。如果其中一列的长度大于LongReadLen,则将引发数据截断错误(LongTrunkOk为false),或者该列将被自动截断(LongTruncOk为true)。
目前,DBI默认设置为80。
发布于 2017-12-27 18:36:13
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属性设置为您想要的任何值。
如果您使用1-arg版本的connect_info/options/on_connect_do从配置文件中获取选项,那么您可能就不走运了,除非您的加载器是Config::Any::Perl,在这种情况下,您可以通过dbicdump键以相同的方式指定sub。
https://stackoverflow.com/questions/47989825
复制相似问题