Сортировка таблицы по полю HIGH_VALUE (тип данных LONG)

Рейтинг: 0Ответов: 1Опубликовано: 18.08.2023

Необходимо отсортировать партиции таблицы (таблица SYS.all_tab_partitions) по HIGH_VALUE, но при обычно ORDER BY выводится следующая ошибка:

ORA-00997: неверное использование типа данных LONG
00997. 00000 -  "illegal use of LONG datatype"

Можно ли это сделать без отдельных процедур и временных таблиц?

Ответы

▲ 1Принят
  1. создать временную таблицу (не обязательно GTT)
create global temporary table all_tab_partitions_gtt (
   table_owner        varchar2(128),
   table_name         varchar2(128),
   partition_name     varchar2(128),
   high_value         clob,
   partition_position number
) on commit delete rows;
  1. загрузить данные во временную таблицу, избавившись от LONG
delete all_tab_partitions_gtt;
insert into all_tab_partitions_gtt (
   table_owner,
   table_name,
   partition_name,
   high_value,
   partition_position
) 
select
   table_owner,
   table_name,
   partition_name,
   to_lob(high_value),
   partition_position
from 
   all_tab_partitions
where 
   -- выборка нужных таблиц
   ...
  1. просмотреть загруженные данные
select 
   * 
from 
   all_tab_partitions_gtt 
order by 
   to_char(high_value)

Правда, high_value хранит не значение, а литерал значения, возможно придётся сначала его сконвертировать в значение нужного типа (напр, динамическим запросом).