为什么我在"readSQL"方法中的"getVector"期间得到OCI-307



我正在升级我们的应用程序以使用最新的Oracle即时客户端库(linux-x64 v21.1.0.0.0(,我遇到了一个以前从未见过的新异常。

OCI-30757: Message 30757 not found;  product=RDBMS; facility=OCI

它发生在调用我们类型的readSQL方法之一中的oracle::occi::getVector期间:

void MyType::readSQL(AnyData& stream)
{
mId = stream.getNumber(); // oracle::occi::Number
oracle::occi::getVector(stream, mNames); // std::vector<std::string>
}

为了支持新的occi版本,我们需要对readSQL方法进行一些更改吗?

这是调用堆栈:

oracle::occi::SQLException::SQLException(oracle::occi::SQLExceptionImpl*)@plt
oracle::occi::SQLExceptionCreate(void*, int)
oracle::occi::ErrorCheck(int, OCIError*)
oracle::occi::getVector(oracle::occi::AnyData const&, std::vector<std::string, std::allocator<std::string> >&)
MyDataType::readSQL(MyDataType * const this, oracle::occi::AnyData & stream)
MyDataType::readSQL(void * ctx)
libclntsh.so.21.1!kodpunp
libclntsh.so.21.1!kokoupkl
kokoicvtgen
kosimgconv
kosicvt
libclntsh.so.21.1!kosibegin
libclntsh.so.21.1!kpctos
ttca2p
ttcacs
ttcdrv
nioqwa
upirtrc
kpurcsc
kpuexec
OCIStmtExecute
oracle::occi::StatementImpl::doOCIExecute()
oracle::occi::StatementImpl::do_execute()
oracle::occi::StatementImpl::executeUpdate(std::string const&)
main(int argc, char ** argv)

我甚至不知道它为什么在这里调用readSQL,SP不会返回那种类型的对象,而且SP在崩溃之前甚至没有执行。

这在occi-libs的v11中工作得很好:readSQL没有被调用,SP被执行,一切都很好。

编译器也更新了吗?正在使用哪个版本的编译器?

嗯。您正在使用哪个libocci共享库?默认的libocci.so仅与g++4.x STL兼容。

OCCI未通过gcc10认证。当然不是默认的libocci。但是你可以尝试使用一个新的库来处理g++5/6/7/8。它被命名为libocci_gcc53.so.21.1,这是您在安装常规客户端(21c(时看到的,而不是即时客户端。

相关内容

  • 没有找到相关文章

最新更新