ora-01406 Ошибка при получении значений с использованием OCI - PullRequest
1 голос
/ 22 сентября 2009

Это происходит при извлечении значений, максимальная длина которых равна 50, в буфер, который может содержать только 30 символов.

Я уже посмотрел на ошибку и нашел возможное решение, которое заключается в расширении размера буфера, к которому привязано значение.

Проблема в том, что это происходит только в некоторых наших системах, а не в других. Версия Oracle имеет какое-либо отношение к этому? Если да, то в какой версии эта ошибка была изменена?

Используемые нами версии Oracle: 10.2.0.1 и 10.2.0.3

.

Ответы [ 2 ]

1 голос
/ 22 сентября 2009

Ошибка, перечисленная в вопросе, была исправлена ​​в 10.2.0.3, и эта ошибка указана только в версиях Oracle до этого. Изменить: та же проблема была замечена в Oracle 10.2.0.4. Мы все еще ищем это

Edit2: при определении курсоров для столбцов CHAR / VARCHAR в OCI (для этого мы используем оболочку), размер строки, которая привязана к столбцу, должен быть как минимум на один больше максимальной ширины столбца.

например. Имя столбца: U_NAME Тип: VARCHAR (30)

1. char zName [30]; pCursor-> Define (zName, 30O); // это будет аварийно, если столбец имеет значение с 30 символами

2. char zName [31]; pCursor-> Define (zName, 30O); // это приведет к сбою, если столбец имеет значение 30 символов

3. char zName [31]; pCursor-> Define (zName, 31); // Правильный. не произойдет сбой для любого значения

0 голосов
/ 22 сентября 2009

У вас есть ошибка в вашем коде, в которой он допускает только 30 символов, когда он может получить 50. Почему бы просто не исправить это, а не беспокоиться о том, с какой версией Oracle ошибка вызывает проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...