Как мы можем получить доступ к типу объекта (не к таблице объектов) в функции 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;
Надеюсь, это проясняет.