Передача массивов в хранимую процедуру Oracle через ADO
От: Igor_from_Kiev Украина  
Дата: 07.02.03 09:57
Оценка:
Здравствуйте!
Нужна помощь в связи с проблемой — при передаче массива в хранимую процедуру получаю Unspecified Error
Как правильно работать с массивами через ADO? Какие есть тонкости?

Дополнительная информация:
версия Oracle 9i, ADO 2.7
тип массива в Oracle
CREATE TYPE V10 AS VARRAY(10) OF INTEGER
есть хранимая процедура, которая принимает параметр типа V10
(arr IN V10)

часть кода на C++:


        _ParameterPtr pprmBinaryVal = NULL;
        VARIANT vtBinaryVal;
        VariantInit(&vtBinaryVal);
        vtBinaryVal.vt = VT_ARRAY|VT_I4;

        SAFEARRAY FAR *psa;
        SAFEARRAYBOUND rgsabound[1];
        rgsabound[0].lLbound = 0;
        rgsabound[0].cElements = 10;
        psa = SafeArrayCreate(VT_I4, 1,rgsabound);
        long ix[1];
        for(int k=0; k<10; k++)
        {
            ix[0] = k;
            long lVal = k;
            SafeArrayPutElement(psa,ix,&lVal); 
        }

        vtBinaryVal.parray = psa;

        
        int n = 10*SafeArrayGetElemsize(psa);
        pprmBinaryVal = OraCommand->CreateParameter("arr",(enum DataTypeEnum)(adArray|adInteger),adParamInput,n,vtBinaryVal);
        
        OraCommand->Parameters->Append(pprmBinaryVal);
        
        pprmBinaryVal->Value = vtBinaryVal;
              
        OraCommand->Execute(&vtEmpty, &vtEmpty2, adCmdStoredProc);



При выполнении OraCommand->Execute получаю Unspecified Error
В самом теле процедурі ошибки быть не может, так как пробовал сократить ее до минимума — оставить один заведомо правильный оператор. Все остальное тоже похоже правильно, так как без этого параметра все работает. Так что проблема в передаче параметра.
Как говорится — теория правильная, а коммунизма нет:)

Кто знает, как сделать это правильно, пожалуйста подскажите
Заранее благодарен всем, кто откликнется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.