как мне выполнить функцию из TOAD для Oracle и привязать результат к сетке данных

У меня есть функция, которая принимает в качестве одного из аргументов VARRAY объектов pl/sql. Как выполнить эту хранимую процедуру и связать возвращаемый ею набор результатов с сеткой данных в TOAD для Oracle?


person neesh    schedule 13.05.2010    source источник


Ответы (1)


После некоторых поисков я нашел ответ на свою проблему. Скажем, ваш тип varray назывался varchar_pair_array, а объекты, хранящиеся в этом массиве, назывались varchar_pair_object. varchar_pair_object — это простой объект, членами которого являются два varchar.

Вот код для выполнения процедуры, которая принимает массив varchar_pair_object(s):

DECLARE 
  RetVal SYS_REFCURSOR;
  a_simplevalue VARCHAR2(200);
  another_simplevalue VARCHAR2(200);
  my_array_of_varchar_pairs VARCHAR_PAIR_ARRAY; -- assume varchar_pair_array is defined somewhere else
  my_obj VARCHAR_PAIR_OBJECT; -- assume varchar_pair_object is defined somewhere else
  my_other_obj VARCHAR_PAIR_OBJECT;
BEGIN 
  a_simplevalue := 'hello';
  another_simplevalue := 'there';
  my_obj := VARCHAR_PAIR_OBJECT('nice to meet you', 'greetings');
  my_other_obj := VARCHAR_PAIR_OBJECT('goodbye', 'ciao');
  my_array_of_varchar_pairs := VARCHAR_PAIR_ARRAY(); 
  my_array_of_varchar_pairs.EXTEND(2); -- this should be the number of objects you plan to put into the array
  my_array_of_varchar_pairs(1) := my_obj;
  my_array_of_varchar_pairs(2) := my_other_obj; 

  RetVal := my_function ( a_simplevalue, another_simplevalue, my_array_of_varchar_pairs); -- assuming your array takes two varchars and one array of VARCHAR_PAIR_OBJECT (s)
  :to_grid := RetVal;

END;

Скопируйте и вставьте этот код в SQL-редактор TOAD и измените его, чтобы он адаптировался к вашей функции и типам, и нажмите F9. TOAD спросит вас о типе переменной :to_grid. Выберите курсор (при условии, что ваша функция возвращает курсор ссылки) и нажмите Enter. TOAD привяжет набор результатов к сетке данных.

Ссылки, которые мне помогли:

http://www.smart-soft.co.uk/Oracle/oracle-plsql-tutorial-part-11.htm (хорошее руководство по коллекциям) http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/10_objs.htm#1972 (особенно полезно в в данном случае это раздел по объявлению и инициализации объектов)

С очень небольшими изменениями то же самое можно сделать с процедурой.

person neesh    schedule 13.05.2010
comment
Также взгляните на функцию «Выполнение процедуры» в обозревателе схем. У него есть возможность загрузить результаты курсора ссылки в сетку после выполнения. У него также есть то преимущество, что он запоминает параметры, которые вы использовали в последний раз, когда выполняли эту процедуру. - person Igby Largeman; 14.05.2010
comment
Проблема в том, что со сложными типами, такими как varray и объекты, он не будет (не может?) генерировать sql для сложных типов, и вы сами их инициализируете. - person neesh; 14.05.2010
comment
Верно, но именно поэтому он позволяет редактировать код перед его выполнением :) - person Igby Largeman; 14.05.2010
comment
да. Фактически, большая часть этого кода была сгенерирована TOAD из процедуры выполнения. Я просто не знал, как отредактировать этот код для передачи массива объектов, поэтому изначально задал вопрос здесь. Спасибо. - person neesh; 18.05.2010