sql >> Databáze >  >> RDS >> Oracle

Oracle SQL:Výběr dat a názvu oddílu z tabulky a zkrácení oddílů

Díky vaší radě o rowid , našel jsem řešení. Pokud máte rowid, mělo by být možné určit objekt, ke kterému řádek patří.

Minimální příklad se 4 hashovými oddíly:

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;

Nyní má každý řádek ROWID . Číslo objektu můžete zjistit pomocí DBMS_ROWID.ROWID_OBJECT . Slovníková tabulka USER_OBJECTS má pak název_objektu (=název tabulky) a název podřízeného_objektu (=název oddílu):

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. MySQL vs MongoDB 1000 přečtení

  2. Upravit sloupec versus změnit sloupec

  3. MS SQL Server a JDBC:uzavřené připojení

  4. Databázový dotaz pro vyhledávání pomocí adresy