Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle SQL:Wybieranie danych i nazwy partycji z tabeli i obcinanie partycji

Dzięki Twojej wskazówce na temat rowidu , znalazłem rozwiązanie. Jeśli masz wierszid, powinno być możliwe określenie obiektu, do którego należy wiersz.

Minimalny przykład z 4 partycjami mieszającymi:

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;

Teraz każdy wiersz ma ROWID . Numer obiektu możesz znaleźć za pomocą DBMS_ROWID.ROWID_OBJECT . Tabela słownika USER_OBJECTS ma wtedy nazwa_obiektu (=nazwa tabeli) i nazwa_podobiektu (=nazwa partycji):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaprojektować tabelę, która będzie przechowywać bardzo duże dane?

  2. Wstaw do tabeli wybierz z tabeli a i tabeli b gdzie

  3. Zapytanie o usunięcie Oracle zajmuje zbyt dużo czasu

  4. Błąd podczas tworzenia połączenia z Oracle ODBC w programie Excel

  5. Oracle Floats a liczba