LINUX.ORG.RU

Гуру по OCI8, help!!!


0

0

Хочу передать массив строк в PL/SQL блок, используя OCIBindByName()
*valuep указывает на строку вида 12345'\0'qwerty'\0'
*alenp содержит 6,7
*curelep 2
dty SQLT_STR
Вопрос 1-ый:
Что такое value_sz, если я туда ставлю 7 тогда
вектора в процедуре выглядят как 12345werty
^^^
Вопрос второй:
В описании ORA-01485 вижу сведения о каких-то 2-х байтах перед
строкой, чего имеется ввиду?

Третий
Что происходит если процедура ожидает массив а я bind ей в качестве
аргумента 1 переменную

Заранее спасибо за советы.


fire sovet perviy: govorit na russkom vsetaki :) ili na english. potomu kak ya voobshe ne ponyal chego ty hochesh i v chem problema . Poprobuy podrobnee opisat problemu.

master
()

Надеюсь что на етот раз объясню лучше :-)))
Есть package:
TYPE T_VarChar_Arr IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;
create or replace package www_user.test is
procedure test(ar1 IN T_VarChar_Arr);
end test;
Требуется вызвать эту процедуру передав на вход ей массив строк.

Переменную в блоке
BEGIN
test(ar1=>:ar1);
END;
привязываю с помощью OCIBindByName() для этого ей в качестве параметров передаю
строку данных: "12345\0qwerty\0",
массив длин переменных: 6,7
число переменных: 2
тип переменных: SQLT_STR
и есть еще не совсем понятный мне параметр value_sz (так называется в документации и на сколько я понял - max длина переменной массива данных), вообщем если я туда ставлю 7 то в процедуре переменные массива выглядят
как 12345 и werty, почему так?

Пока разбирался с передачей длинн натыкался на ошибку ORA-01485:
You bound a buffer of type DTYVCS (VARCHAR with the two byte length in front) and at execute time the length in the first two bytes is more than the maximum buffer length, given in the bind call. The number of elements in the array and the current number of elements in the array cannot be more than the maximum size of the array.
Не понял что за 2 байта перед началом?

И можно ли этой процедуре привязать не массив строк, а
массив символов?

fire
() автор топика

Nu pro dva baita eto prosto :) dva baita dlinny potom idut dannye . a vot pro bind tam kazhetsya nado peredavat ne ukazatel ne stroku razdelennuyu probelami a massiv ukazateley na stroki. No esli chestno nikogda ne proboval bindit massiv strok ... ty ego na input bindosh ? a maxarr_len ty ukazal ? Vrode tozhe 2 dolzhno byt. I ogromnaya prosba : esli razbereshsya rasskazhi mne pls. kidai na mylo bofh@rbc.ru

master
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.