Исключение при вызове хранимой процедуры: ORA-01460 – запрошенное неосуществленное или необоснованное преобразование

Вопрос:Я пытаюсь вызвать хранимую процедуру с помощью ADO.NET, и я получаю следующую ошибку: ORA-01460 - нереализованный или запрашивается необоснованное обращение Хранимая процедура, которую я пытаюсь вызвать, имеет следующие параметры: param1 IN VARCHAR2, param2 IN NUMBER, param3 IN VARCHAR2, param4 OUT NUMBER, param5 OUT NUMBER, param6 OUT NUMBER, param7 OUT VARCHAR2 Ниже приведен код С#, который

Вопрос:

Я пытаюсь вызвать хранимую процедуру с помощью ADO.NET, и я получаю следующую ошибку:

ORA-01460 – нереализованный или запрашивается необоснованное обращение

Хранимая процедура, которую я пытаюсь вызвать, имеет следующие параметры:

param1 IN VARCHAR2, param2 IN NUMBER, param3 IN VARCHAR2, param4 OUT NUMBER, param5 OUT NUMBER, param6 OUT NUMBER, param7 OUT VARCHAR2

Ниже приведен код С#, который я использую для вызова хранимой процедуры:

OracleCommand command = connection.CreateCommand(); command.CommandType = CommandType.StoredProcedure; command.CommandText = «MY_PROC»; OracleParameter param1 = new OracleParameter() { ParameterName = «param1», Direction = ParameterDirection.Input, Value = p1, OracleDbType = OracleDbType.Varchar2, Size = p1.Length }; OracleParameter param2 = new OracleParameter() { ParameterName = «param2», Direction = ParameterDirection.Input, Value = p2, OracleDbType = OracleDbType.Decimal }; OracleParameter param3 = new OracleParameter() { ParameterName = «param3», Direction = ParameterDirection.Input, Value = p3, OracleDbType = OracleDbType.Varchar2, Size = p3.Length }; OracleParameter param4 = new OracleParameter() { ParameterName = «param4», Direction = ParameterDirection.Output, OracleDbType = OracleDbType.Decimal }; OracleParameter param5 = new OracleParameter() { ParameterName = «param5», Direction = ParameterDirection.Output, OracleDbType = OracleDbType.Decimal}; OracleParameter param6 = new OracleParameter() { ParameterName = «param6», Direction = ParameterDirection.Output, OracleDbType = OracleDbType.Decimal }; OracleParameter param7 = new OracleParameter() { ParameterName = «param7», Direction = ParameterDirection.Output, OracleDbType = OracleDbType.Varchar2, Size = 32767 }; command.Parameters.Add(param1); command.Parameters.Add(param2); command.Parameters.Add(param3); command.Parameters.Add(param4); command.Parameters.Add(param5); command.Parameters.Add(param6); command.Parameters.Add(param7); command.ExecuteNonQuery();

Любые идеи, что я делаю неправильно?

Лучший ответ:

Не уверен, что он имеет значение, но значения SQL VARCHAR2 ограничены до 4000 (хотя PL/SQL может справиться с 32 тысячами)

Вы можете попробовать изменить “Размер = 32767” на что-то меньшее (например, 500) и посмотреть, работает ли это.

Также рассмотрите размеры строк, которые вы передаете. Если один из них – 50000 символов, это может быть проблемой.

Ответ №1

какой клиент оракула вы используете. Существует проблема оракула, связанная с привязками, которая дает такое же сообщение об ошибке. Если я правильно помню, проблема связана со всеми клиентами от 10.2.0.3 до 11.1.0.7, которые могут дать эту ошибку.

У меня было приложение, которое отлично работало с 10.2.0.1, и внезапно с клиентом 11.1.0.7 он получил указанную выше ошибку.

Переключение на 11.2.0.1 клиент oracle исправил проблему.

Однако в вашем случае я бы сначала проверил, соответствуют ли настройки NLS вашего клиента базе данных (или, по крайней мере, совместимы)

Theres не гарантирует эту проблему, но вы можете проверить ее как минимум.

//Извините, что видел, что он уже исправлен, но информация может быть полезна кому-то еще

Cheers,
Замотанный

Ответ №2

Где вы нажимаете значения в параметры?

Изменить: Извините, плохой вопрос. Скорее, каковы значения, которые вы вдавливаете в параметры? Реализация ADO.NET не проверяет тип объекта, который вы вставляете в параметр на стороне клиента; сервер отвечает за проверку того, что тип объекта зацепляется с типом параметра DB, который вы ему дали. Ошибка преобразования может быть вызвана объявлением параметра как, скажем, OracleDbType.Decimal, а затем путем случайного нажатия на строку.

Оцените статью
Добавить комментарий