ora-01406使用OCI获取值时出错

时间:2009-09-22 08:51:49

标签: oracle oci

将最大长度为50的值提取到一个只能容纳30个字符的缓冲区时会发生这种情况。

我已经查找错误并找到了一个可能的解决方案,即扩展值绑定的缓冲区的大小。

问题是,这只发生在我们的一些系统中,而不是在其他系统中。 Oracle版本是否与此有关?如果是,那么更改此错误的版本是什么?

我们使用的Oracle版本是10.2.0.1和10.2.0.3

2 个答案:

答案 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版本?