Oracle – How to Find the Partition or Subpartition Name for an ID

oracleoracle-11goracle-11g-r2select

I know if I need to select from any partition I need to provide partition name

SELECT * FROM TABLE PARTITION(P1);

What if I need to know which partition a particular value belongs using a sql query then?

SELECT PARTITION_NAME FROM TABLE WHERE DOC_ID = 'S00102981655537O';

Error

ORA-00904: "PARTITION_NAME": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 25 Column: 8

Oracle version: 11g

Best Answer

First get rowid of the row and object id of the object using DBMS_ROWID.

SQL> insert into t3 values('S00102981655537O',sysdate,'IN-RJ');

1 row created.

SQL> select dbms_rowid.rowid_object(rowid) from t3 where doc_id='S00102981655537O';

DBMS_ROWID.ROWID_OBJECT(ROWID)
------------------------------
             93178

SQL> select subobject_name from user_objects where data_object_id=93178;

SUBOBJECT_
----------
SYS_SUBP81




SQL> select * from t3 subpartition(SYS_SUBP81);

DOC_ID           DOC_DATET STATE
-------------------- --------- ----------
S00102981655537O     31-MAR-16 IN-RJ

As we can see that row belongs to SYS_SUBP81 subpartition.