Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQL:Избор на данни и име на дял от таблица и съкращаване на дялове

Благодарение на намека ви за rowid , намерих решение. Ако имате rowid, трябва да е възможно да определите обекта, към който принадлежи редът.

Минимален пример с 4 хеш дяла:

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;

Сега всеки ред има ROWID . Можете да разберете номера на обекта чрез DBMS_ROWID.ROWID_OBJECT . Таблицата на речника USER_OBJECTS след това има object_name (=името на таблицата) и subobject_name (=името на дяла):

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. Защо получавам грешка на Oracle при извикване на процедура с C#?

  2. Премахване на дублирани поддървета от заявка CONNECT-BY в Oracle

  3. Oracle 'INSERT ALL' игнорира дубликатите

  4. Маркирайте лица, които споделят общи функции с Oracle SQL

  5. Възможно ли е да се препълни тип Oracle NUMBER?