sql >> Database >  >> RDS >> Oracle

Oracle SQL:gegevens en partitienaam uit tabel selecteren en partities afkappen

Dankzij je hint over de rowid , heb ik een oplossing gevonden. Als je de rowid hebt, zou het mogelijk moeten zijn om te bepalen bij welk object de rij hoort.

Een minimaal voorbeeld met 4 hash-partities:

CREATE TABLE pt (i NUMBER)
 PARTITION BY HASH (i) (PARTITION pt1, PARTITION pt2, PARTITION pt3, PARTITION pt4);

INSERT INTO pt SELECT ROWNUM FROM all_objects WHERE ROWNUM < 20;

Nu heeft elke rij een ROWID . U kunt het objectnummer achterhalen via DBMS_ROWID.ROWID_OBJECT . De woordenboektabel USER_OBJECTS heeft dan de object_name (=de naam van de tabel) en de subobject_name (=de naam van de partitie):

SELECT i, 
       ROWID AS row_id, 
       dbms_rowid.rowid_object(ROWID) AS object_no,
       (SELECT subobject_name 
          FROM user_objects 
         WHERE object_id = dbms_rowid.rowid_object(pt.ROWID)) AS partition_name
  FROM pt
 ORDER BY 3;

I   ROW_ID              OBJECT_NO PARTITION_NAME
6   AAALrYAAEAAAATRAAA  47832   PT1
11  AAALrYAAEAAAATRAAB  47832   PT1
13  AAALrYAAEAAAATRAAC  47832   PT1
9   AAALrZAAEAAAATZAAA  47833   PT2
10  AAALrZAAEAAAATZAAB  47833   PT2
12  AAALrZAAEAAAATZAAC  47833   PT2
17  AAALrZAAEAAAATZAAD  47833   PT2
19  AAALrZAAEAAAATZAAE  47833   PT2
2   AAALraAAEAAAAThAAA  47834   PT3
5   AAALraAAEAAAAThAAB  47834   PT3
18  AAALraAAEAAAAThAAD  47834   PT3
8   AAALraAAEAAAAThAAC  47834   PT3
1   AAALrbAAEAAAATpAAA  47835   PT4
3   AAALrbAAEAAAATpAAB  47835   PT4
4   AAALrbAAEAAAATpAAC  47835   PT4
7   AAALrbAAEAAAATpAAD  47835   PT4


  1. Meerdere insert/update statements binnen trigger?

  2. AWS RDS Postgres-verbinding mislukt

  3. PostgreSQL-index op JSON

  4. Excel VBA verbinden met Oracle DB met 'ODBC'