Page 1 of 1

Ошибка в ODAC.

Posted: Mon 19 Dec 2005 08:04
by OraError
Простите, что по-русски, уверен что информация будет вопринята, тем кем надо...
Мы являемся зарегистированными ползователями ODAC 5.10.1.16.

Странный косяк происходит только на Oracle 9.2.0.6: при вызове хранимой процедуры с одним входным параметром типа varchar2 получаем ошибку ORA-06502: PL/SQL: numeric or value error. Происходит это если увеличивать длину передаваемой строки.

Чтение документации и анализ OraClasses.pas выявило следующее:
для входных параметров типа varchar2 происходит повторный вызов OCIAttrSet.

Code: Select all

procedure TOCICommand.BindParam(Param: TOraParamDesc);
...
        try
          Check(OCIAttrSet(hBind, OCI_HTYPE_BIND, Handle, 0, OCI_ATTR_MAXDATA_SIZE, hOCIError));
        finally
          FreeOrdinal(Handle);
        end;

        if (OCIVersion >= 9000) and (FConnection.GetOracleVersion >= 9200) and (Param.ParamType = pdInput) and (Param.FLen > 0) then begin
          MaxDataSize := Param.FLen;
          Handle := OrdinalToPtr(MaxDataSize);
          try
            Check(OCIAttrSet(hBind, OCI_HTYPE_BIND, Handle, 0, OCI_ATTR_MAXCHAR_SIZE, hOCIError));
          finally
            FreeOrdinal(Handle);
          end;
        end;
...
end;
Именно из-за него и происходит ошибка. С другой стороны, в документации:

Oracle Call Interface Programmer's Guide
Release 2 (9.2)
Part Number A96584-01
5
Binding and Defining
Character Conversion Issues in Binding and Defining
Buffer Expansion During Binding

однозначно указано:

Do not set OCI_ATTR_MAXDATA_SIZE for OUT binds or for PL/SQL binds.
Only set OCI_ATTR_MAXDATA_SIZE for INSERT or UPDATE statements.

Oracle запрещает использовать OCI_ATTR_MAXDATA_SIZE при вызове хранимых процедур, что является причиной ошибки.

Непонятным остается одно: почему это происходит только на Oracle 9.2.0.6, на всех остальных версиях 9.2.0.x и на 10g - работает.
Хочется узнать, исправленна ли эта ошибка, и если да, то с какой версии ODAC'а?

Posted: Mon 19 Dec 2005 08:41
by Alex
Please write your forum posts in English or send us your requests by E-mail.
We have fixed such issue in one of the previous ODAC builds, please try to download the latest ODAC version and reproduce your problem with it.