Исключение при вызове хранимой процедуры: ORA-01460 - запрошено невыполненное или необоснованное преобразование - PullRequest
0 голосов
/ 31 марта 2010

Я пытаюсь вызвать хранимую процедуру, используя 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

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

    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();

Есть идеи, что я делаю не так?

Ответы [ 3 ]

1 голос
/ 31 марта 2010

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

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

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

1 голос
/ 10 августа 2010

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

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

Переход к клиенту oracle 11.2.0.1 устранил проблему.

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

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

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

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

0 голосов
/ 31 марта 2010

Куда вы толкаете значения в параметры?

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

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