1

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

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

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

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

4

2 回答 2

1

问题中列出的错误已在 10.2.0.3 中修复,并且该错误仅在之前的 Oracle 版本中给出。编辑:Oracle 10.2.0.4 中也出现了同样的问题。我们仍在研究这个

Edit2:在 OCI 中为 CHAR/VARCHAR 列定义游标时(我们为此使用包装器),绑定到列的字符串大小必须至少比列的最大宽度大一。

例如列名:U_NAME 类型:VARCHAR(30)

1. 字符 zName[30]; pCursor->Define(zName, 3O); // 如果该列的值包含 30 个字符,这将崩溃

2. 字符 zName[31]; pCursor->Define(zName, 3O); // 如果该列的值包含 30 个字符,这将崩溃

3. 字符 zName[31]; pCursor->Define(zName, 31); // 正确的。不会因任何价值而崩溃

于 2009-09-22T11:06:07.647 回答
0

您的代码中有一个错误,因为它只允许 30 个字符,而它可能会收到 50 个字符。为什么不直接修复它,而不用担心该错误会导致哪个 Oracle 版本出现问题?

于 2009-09-22T09:43:48.170 回答