Здравствуйте!
Нужна помощь в связи с проблемой — при передаче массива в хранимую процедуру получаю 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
В самом теле процедурі ошибки быть не может, так как пробовал сократить ее до минимума — оставить один заведомо правильный оператор. Все остальное тоже похоже правильно, так как без этого параметра все работает. Так что проблема в передаче параметра.
Как говорится — теория правильная, а коммунизма нет:)
Кто знает, как сделать это правильно, пожалуйста подскажите
Заранее благодарен всем, кто откликнется.