ADO DB + Oracle provider + массив строк в качестве параметра
От: tdiff  
Дата: 26.11.15 15:15
Оценка:
Пытаюсь выполнить на сервере хранимку, одним из параметров которой является 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 умеет передавать такие довольно сложные типы?
Отредактировано 26.11.2015 17:53 tdiff . Предыдущая версия . Еще …
Отредактировано 26.11.2015 17:52 tdiff . Предыдущая версия .
Отредактировано 26.11.2015 17:28 tdiff . Предыдущая версия .
Отредактировано 26.11.2015 16:08 tdiff . Предыдущая версия .
Re: ADO DB + Oracle provider + массив строк в качестве параметра
От: wildwind Россия  
Дата: 26.11.15 21:28
Оценка:
Здравствуйте, tdiff, Вы писали:

t> Пытаюсь выполнить на сервере хранимку, одним из параметров которой является string_array (nested_table с одной колонкой VARCHAR2(100)), но нигде не смог найти информации, поддерживает Oracle OLE DB provider передачу массива в качестве параметра SP или нет.


ЕМНИП нет. Используй OCCI, там есть все. Или делай обертку (анонимный блок), конструирующую и заполняющую nested table.
Я привык, что в интернете можно найти ответ на любой вопрос. Я не люблю думать. Зачем думать, если всё уже придумано до меня? © Zenden@RSDN ::: avalon/1.0.442
Re[2]: ADO DB + Oracle provider + массив строк в качестве параметра
От: tdiff  
Дата: 27.11.15 09:11
Оценка:
Здравствуйте, 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 будет превращаться в таблицу?
Re[3]: ADO DB + Oracle provider + массив строк в качестве параметра
От: wildwind Россия  
Дата: 27.11.15 16:36
Оценка:
Здравствуйте, tdiff, Вы писали:

t> Всё и идёт к OCI.


Не обязательно чистый OCI. OCCI это классовая обертка над ним.

t> А по поводу второго варианта, я правильно понял

Да.
Я привык, что в интернете можно найти ответ на любой вопрос. Я не люблю думать. Зачем думать, если всё уже придумано до меня? © Zenden@RSDN ::: avalon/1.0.442
Re[4]: ADO DB + Oracle provider + массив строк в качестве параметра
От: tdiff  
Дата: 27.11.15 17:31
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, tdiff, Вы писали:


t>> Всё и идёт к OCI.


W>Не обязательно чистый OCI. OCCI это классовая обертка над ним.


t>> А по поводу второго варианта, я правильно понял

W>Да.

ок, спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.