#oracle #plsql
#Oracle #plsql
Вопрос:
У меня есть процедура в пакете
create or replace package MyPack
type MyArr is table of varchar2(30) index by pls_integer;
prodecure MyProc(p in MyArr);
end MyPack;
и я хочу вызвать его из Pro * C. Итак, у меня есть (вся остальная часть функции опущена)
char my_arr[50][30] = {0};
EXEC SQL EXECUTE
BEGIN
MyPack.MyProc(:my_arr);
END;
END-EXEC;
Когда я пытаюсь скомпилировать это, я получаю ошибку
«PLS-S-00418, тип привязки массива должен соответствовать типу строки таблицы PL / SQL»
Есть идеи о том, что я делаю неправильно?
Ответ №1:
смотрите Пример программы 9: Вызов хранимой процедуры Я думаю, это соответствует вашему описанию.
Комментарии:
1. Это близко, но ни один из примеров не имеет типа, объявленного в пакете, что, похоже, несколько запутывает проблему.
2. Грег, попробуй сделать объявление с помощью MyPack. myArr.EXEC SQL НАЧИНАЕТ РАЗДЕЛ ОБЪЯВЛЕНИЯ; EXEC SQL my_arr MY pack. myArr;
3. В конце концов я это сделал — я опубликую свое решение, когда у меня будет немного больше времени.
4. Не могли бы вы опубликовать свое решение сейчас, как и обещали? Это было бы очень ценно.
Ответ №2:
У меня была похожая проблема. Я пытался передать массив c ,
char names[10][10] = { "Tom", "Dick", "Harry", ... };
в хранимую процедуру. Решением было объявить параметр процедуры как
TYPE NameTab IS TABLE OF CHAR(10) INDEX BY BINARY_INTEGER;