как правильно вызвать табличную функцию в PL/SQL

У меня есть табличная функция, которая возвращает таблицу имен файлов (type t_file_list is table of clob;) из файла .zip (в формате BLOB), заголовок выглядит так:

  function get_file_list(
    p_zipped_blob in blob
   ,p_encoding in varchar2 := null
  )
    return t_file_list
  is
  .....
  end;

и мне нужно выбрать эти имена файлов и для каждого вызова какой-то процедуры, но я не могу найти способ правильно вызвать function get_file_list, я пробую это:

  for i in (select * from table(zip_util_pkg.get_file_list(ab_zipped_blob))) 
  loop
    .....
  end loop;

но это дает мне некоторые ошибки, такие как ORA-22905 и PLS-00642. Может ли кто-нибудь сказать мне, что я делаю неправильно и как правильно вызывать табличную функцию?


person Silverrook    schedule 25.02.2016    source источник
comment
Является ли этот тип: type t_file_list is table of clob; объявленным в пакете? Или на уровне базы данных?   -  person krokodilko    schedule 25.02.2016
comment
он объявлен в обоих пакетах (в zip_util_pkg и в пакете, где мне нужно вызвать функцию get_file_list)   -  person Silverrook    schedule 25.02.2016


Ответы (1)


Нет необходимости использовать SQL — вы можете сделать это полностью на PL/SQL:

DECLARE
  p_files ZIP_UTIL_PKG.T_FILE_LIST;
BEGIN
  p_files := zip_util_pkg.get_file_list(ab_zipped_blob);
  FOR i IN 1 .. p_files.COUNT LOOP
    some_procedure( p_files(i) );
  END LOOP;
END;
/
person MT0    schedule 25.02.2016
comment
Спасибо, мне очень помогает :-) - person Silverrook; 26.02.2016