Как мы можем получить доступ к типу объекта (не к таблице объектов) в функции Oracle TABLE?

Как мы можем получить доступ к типу объекта (не к таблице объектов) в функции TABLE?

Табличная функция работает с коллекцией объектов, но мне нужно получить доступ к одной строке, используя функцию TABLE.

Я получаю сообщение об ошибке "ORA-22905: невозможно получить доступ к строкам из не вложенного элемента таблицы", когда я пытаюсь использовать функцию TABLE с типом объекта вместо набора типов объектов.

Обходной путь, который я использую, состоит в том, чтобы создать коллекцию табличных типов для этого объекта и поместить строку в первый индекс, а затем использовать тип таблицы в функции. Любые другие простые решения?

Мне нужно запросить объект, как будто это строка в таблице. Это значит, что в моем приложении есть общая кодовая база для поддержки двух разных вариантов использования.

Имея общую кодовую базу, я могу использовать один и тот же запрос SELECT для запроса записей из реальной таблицы или из однорядного объекта с использованием функции TABLE. Изменяется только предложение FROM динамического SQL.

CASE 1: 
Querying a physical table

v_select := 'SELECT a,b,c,d '
v_from   := '  FROM ' || v_actual_table 
v_where  := '<where_predicate>

EXECUTE IMMEDIATE v_select || v_from  || v_where;


CASE 2:
Querying a row object using TABLE function. The row object is coming from Oracle AQ channel in the form of messages.

v_select := 'SELECT a,b,c,d '
v_from   := '  FROM TABLE(:1)' 
v_where  := '<where_predicate>

EXECUTE IMMEDIATE v_select || v_from  || v_where USING v_table_type;

Надеюсь, это проясняет.

0 ответов

Другие вопросы по тегам