将最大长度为50的值提取到一个只能容纳30个字符的缓冲区时会发生这种情况。
我已经查找错误并找到了一个可能的解决方案,即扩展值绑定的缓冲区的大小。
问题是,这只发生在我们的一些系统中,而不是在其他系统中。 Oracle版本是否与此有关?如果是,那么更改此错误的版本是什么?
我们使用的Oracle版本是10.2.0.1和10.2.0.3
答案 0 :(得分:1)
问题中列出的错误已在10.2.0.3中修复,错误仅在之前的Oracle版本中给出。 编辑:在Oracle 10.2.0.4中看到了同样的问题。我们仍然在寻找这个
Edit2:在OCI中为CHAR / VARCHAR列定义游标时(我们为此目的使用包装器),绑定到列的字符串大小必须至少比列的最大宽度大1。
e.g。列名:U_NAME类型:VARCHAR(30)
1。 char zName [30]; pCursor->定义(zName,3O); //如果列的值为30个字符
,则会崩溃2。 char zName [31]; pCursor->定义(zName,3O); //如果列的值为30个字符
,则会崩溃3。 char zName [31]; pCursor->定义(zName,31); //正确不会因任何值而崩溃
答案 1 :(得分:0)
你的代码中有一个错误,因为它只允许30个字符,当它可能收到50个字符时。为什么不修复它而不是担心错误导致问题的哪个Oracle版本?