powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Указание списка партиций в запросе
7 сообщений из 7, страница 1 из 1
Указание списка партиций в запросе
    #39855071
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Подкажите, существует ли возможность выборки данных из конкретных партиций. Типа такого завпроса
select * from user_table partition IN (p_0, p_1...) t
...
Рейтинг: 0 / 0
Указание списка партиций в запросе
    #39855086
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует в форме table expression, см. SQL Reference. Для partition by system это единственный вариант.

Если интересует конкретно in(), то необходимо и достаточно в where clause указать значения ключа секционирования.
...
Рейтинг: 0 / 0
Указание списка партиций в запросе
    #39855104
Да ну
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Указание списка партиций в запросе
    #39855114
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
andrey_anonymousДля partition by system это единственный вариант.
Технически не единственный, т.к. есть undocumented tbl$or$idx$part$num:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
SQL> create table t(
  2    x int)
  3  partition by system (
  4    partition p1,
  5    partition p2);

Table created.

SQL>
SQL> insert into t partition (p1) values (1);

1 row created.

SQL> insert into t partition (p2) values (2);

1 row created.

SQL>
SQL> select *
  2    from t
  3   where tbl$or$idx$part$num(t, 0, 0, 0, rowid) = 1;

         X
----------
         1

SQL> #0 explain plan for
SQL> /

Explained.

SQL> select * from table(dbms_xplan.display(format=> '-note'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------
Plan hash value: 118045724

------------------------------------------------------------------------------------------------
| Id  | Operation               | Name | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT        |      |     1 |    25 |   274   (0)| 00:00:01 |       |       |
|   1 |  PARTITION SYSTEM SINGLE|      |     1 |    25 |   274   (0)| 00:00:01 |     1 |     1 |
|   2 |   TABLE ACCESS FULL     | T    |     1 |    25 |   274   (0)| 00:00:01 |     1 |     1 |
------------------------------------------------------------------------------------------------

SQL> select *
  2    from t
  3   where tbl$or$idx$part$num(t, 0, 0, 0, rowid) = 2;

         X
----------
         2

SQL> #0 explain plan for
SQL> /

Explained.

SQL> select * from table(dbms_xplan.display(format=> '-note'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------
Plan hash value: 118045724

------------------------------------------------------------------------------------------------
| Id  | Operation               | Name | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT        |      |     1 |    25 |   274   (0)| 00:00:01 |       |       |
|   1 |  PARTITION SYSTEM SINGLE|      |     1 |    25 |   274   (0)| 00:00:01 |     2 |     2 |
|   2 |   TABLE ACCESS FULL     | T    |     1 |    25 |   274   (0)| 00:00:01 |     2 |     2 |
------------------------------------------------------------------------------------------------

...
Рейтинг: 0 / 0
Указание списка партиций в запросе
    #39855128
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousСуществует в форме table expression, см. SQL Reference. Для partition by system это единственный вариант.

Если интересует конкретно in(), то необходимо и достаточно в where clause указать значения ключа секционирования.
К сожелению, значение ключа нельзя указать
...
Рейтинг: 0 / 0
Указание списка партиций в запросе
    #39855205
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LemkolegК сожелению, значение ключа нельзя указать

Код: plsql
1.
2.
3.
4.
5.
WITH T AS (
           SELECT  * FROM USER_TABLE PARTITION(P_0) UNION ALL
           SELECT  * FROM USER_TABLE PARTITION(P_1) UNION ALL
           ...
          )



SY.
...
Рейтинг: 0 / 0
Указание списка партиций в запросе
    #39855271
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYLemkolegК сожелению, значение ключа нельзя указать

Код: plsql
1.
2.
3.
4.
5.
WITH T AS (
           SELECT  * FROM USER_TABLE PARTITION(P_0) UNION ALL
           SELECT  * FROM USER_TABLE PARTITION(P_1) UNION ALL
           ...
          )



SY.
СПАСИБО
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Указание списка партиций в запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]