Найти все название подраздела - PullRequest
0 голосов
/ 18 марта 2019

Таблица была подразделена на основе столбца (INSTANCE), значение которого может быть «1» или «2». Хотите перечислить все имена подразделов, которые содержат значение INSTANCE, как '2'

select * from user_tab_subpartitions sp where table_name='TEST' and sp.NUM_ROWS >0
and to_char(HIGH_VALUE)='2';

ERROR

ORA-00932: inconsistent datatypes: expected CHAR got LONG

HIGH_VALUE имеет тип LONG ()

Ответы [ 2 ]

0 голосов
/ 19 марта 2019
set serveroutput on;

DECLARE
 high_val VARCHAR2(32767); 
BEGIN
FOR rec IN (select PARTITION_NAME,SUBPARTITION_NAME,HIGH_VALUE  from user_tab_subpartitions sp where table_name='TEST' and sp.NUM_ROWS >0) LOOP
  high_val := rec.HIGH_VALUE;
  IF high_val LIKE '2%' THEN 
    dbms_output.put_line(rec.SUBPARTITION_NAME);
  END IF;
END LOOP;
END;
0 голосов
/ 19 марта 2019

Вы можете получить все подразделы, содержащие определенное значение, по строкам строк записей с этим значением.

Попробуйте этот запрос:

select distinct subobject_name
from user_objects obj join TEST tbl on obj.object_name = 'TEST' 
 and dbms_rowid.rowid_object(tbl.rowid) = obj.data_object_id 
where tbl.INSTANCE = 2;
...