Погоня за "ORA-01084: неверный аргумент в вызове OCI" - PullRequest
5 голосов
/ 29 февраля 2012

У меня есть корпоративный проект с .net 4.0 c #, IBatisNet и CSLA.

Одно из заданий проекта завершается с ошибкой ORA-01084: invalid argument in OCI call при вызове insert proc в пакете. Возвращаемое сообщение об ошибке является в лучшем случае загадочным, хранимый процесс имеет 83 входных параметра, которые не связаны по имени (благодаря IBatis).

Что любопытно: у меня есть набор записей, скажем, Order и OrderItems. Order имеет 28 позиций заказа. Задание должно обновить заказ, создав еще одну Order и скопировав все записи OrderItems. Новые позиции заказа ссылаются на старые позиции заказа по полю ParentOrderItemId, что также является критерием выбора для Orders, который должен быть обновлен.

Когда я запускаю его в первый раз, процесс запускается на OrderItemId: 12345 с ошибкой ORA-01084. Но когда я перезапущу его в следующий раз, он успешно обработает OrderItemId: 12345. А затем взрывается на OrderItemId: 12444. Затем я снова запускаю, и он обрабатывает OrderItemId: 12444 правильно и так далее, и так далее.

Мне передали логи DbParameters, они одинаковы в обоих случаях.

У меня есть трассировка клиента oci, но она также бесполезна.

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

Есть идеи, как отследить ошибки такого типа?

Ответы [ 4 ]

4 голосов
/ 04 апреля 2014

Я получаю это сообщение об ошибке. В моем случае это было потому, что я передавал пустую строку в столбец CLOB. Обычно я передавал большой XML-документ, но иногда не было никакого документа. Теперь я проверяю пустую строку и пишу "empty".

1 голос
/ 19 октября 2015

Я думаю, что после всех этих лет мне нужно дать ответ.

Проблема заключается в драйверах Oracle .Net.У нас было поле Qty, определенное как INT.Из-за внутренней архитектуры Qty может быть отрицательным или нулевым.В 95% случаев кол-во было положительным целым числом (как и должно быть), но иногда из-за корректировок и других факторов оно может быть нулевым или отрицательным.

Итак, в конце я отследил его до порядка, в котором вы помещаете свои записи в базу данных:

Кол-во 1 Кол-во 0 Кол-во null Кол-во -1

работает правильно.

Но в этом случае:

Кол-во null Кол-во 1 Кол-во -1

будет отправлено с недопустимым аргументом OCI для значения "-1".

Я создал тикет в Oracle и отправил его нашей команде по продукту для исправления.С тех пор я двинулся дальше, поэтому не слишком уверен, если и когда это было исправлено.

0 голосов
/ 17 января 2018

Обнуляемый столбец с типом данных nchar(2) стал для меня проблемой. Он не принимает значение NULL, но требует передачи некоторых значений при вставке данных.

0 голосов
/ 21 ноября 2013

Для чего это стоит, я только что столкнулся с этой ошибкой. Проблема была неверной OracleType в одном из моих параметров. Тип был установлен на NVarchar, а столбец базы данных был изменен на Clob.

Попробуйте явно определить ваш параметр OracleType.

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