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

Если интересует конкретно in(), то необходимо и достаточно в where clause указать значения ключа секционирования.
...
Рейтинг: 0 / 0
29.08.2019, 12:58
    #39855104
Да ну
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указание списка партиций в запросе
...
Рейтинг: 0 / 0
29.08.2019, 13:14
    #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
29.08.2019, 13:25
    #39855128
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указание списка партиций в запросе
andrey_anonymousСуществует в форме table expression, см. SQL Reference. Для partition by system это единственный вариант.

Если интересует конкретно in(), то необходимо и достаточно в where clause указать значения ключа секционирования.
К сожелению, значение ключа нельзя указать
...
Рейтинг: 0 / 0
29.08.2019, 15:01
    #39855205
SY
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
29.08.2019, 16:32
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Указание списка партиций в запросе / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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