Пытаюсь выполнить на сервере хранимку, одним из параметров которой является string_array (nested_table с одной колонкой VARCHAR2(100)), но нигде не смог найти информации, поддерживает Oracle OLE DB provider передачу массива в качестве параметра SP или нет.
Если кто-то знает, где посмотреть, подскажите пожалуйста. Или кому-то уже удавалось это провернуть, буду рад совету.
Сейчас делаю вот так:
| код |
| SAFEARRAY* arr = SafeArrayCreateVector(VT_BSTR, 0, 1);
LONG idx = 0;
_bstr_t text = _bstr_t("test");
HRESULT res = SafeArrayPutElement(arr, &idx, text.GetBSTR());
_variant_t arg;
arg.vt = VT_ARRAY | VT_BSTR;
arg.parray = arr;
ADODB::DataTypeEnum type = static_cast<ADODB::DataTypeEnum>(ADODB::adArray | ADODB::adVarChar);
cmd->CommandText = "STORED_PROC_NAME";
cmd->Parameters->Append(cmd->CreateParameter(_bstr_t("INPUT_ARRAY"), type, ADODB::adParamInput, 128, arg));
ADODB::_RecordsetPtr rs(__uuidof(ADODB::Recordset));
rs = cmd->Execute(NULL, NULL, ADODB::adCmdStoredProc);
|
| |
Получаю ошибку "Provider: -Requested conversion is not supported"
Вообще, ADO умеет передавать такие довольно сложные типы?
Здравствуйте, tdiff, Вы писали:
t> Пытаюсь выполнить на сервере хранимку, одним из параметров которой является string_array (nested_table с одной колонкой VARCHAR2(100)), но нигде не смог найти информации, поддерживает Oracle OLE DB provider передачу массива в качестве параметра SP или нет.
ЕМНИП нет. Используй OCCI, там есть все. Или делай обертку (анонимный блок), конструирующую и заполняющую nested table.
Я привык, что в интернете можно найти ответ на любой вопрос. Я не люблю думать. Зачем думать, если всё уже придумано до меня? © Zenden@RSDN :::
avalon/1.0.442
Здравствуйте, wildwind, Вы писали:
W>ЕМНИП нет. Используй OCCI, там есть все. Или делай обертку (анонимный блок), конструирующую и заполняющую nested table.
Всё и идёт к OCI.
А по поводу второго варианта, я правильно понял, что ты имеешь в виду слать через ado sql типа:
begin
-- creating nested table object, e.g. by splitting csv passed in into an array
nested_table = ....
-- executing sp
sp(nested_table)
end
и как-то передавать ему сериализованный массив, который уже в sql будет превращаться в таблицу?
Здравствуйте, tdiff, Вы писали:
t> Всё и идёт к OCI.
Не обязательно чистый OCI. OCCI это классовая обертка над ним.
t> А по поводу второго варианта, я правильно понял
Да.
Я привык, что в интернете можно найти ответ на любой вопрос. Я не люблю думать. Зачем думать, если всё уже придумано до меня? © Zenden@RSDN :::
avalon/1.0.442