Передать массив строк в PL / SQL из Pro * C

#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;