powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составное имя партиции ???
9 сообщений из 9, страница 1 из 1
Составное имя партиции ???
    #39487057
gsvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Здравствуйте.

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production


--Подскажите, как можно обойти ограничение указывания конкретного имени партиции?
--Какая есть возможность select/update/delete/exchange данные из/в секцию таблицы измменяя имя секции делая его составным
--не используя CASE, IF, ELSIF :
--ТИПА

select * from pro_partition_names partition('P'||'201706');

select * from pro_partition_names partition(concat('P','201707'));

select * from pro_partition_names partition(concat('P',to_char(sysdate,'YYYY.MM')));

SELECT * FROM pro_partition_names PARTITION FOR (to_char(sysdate,'DD.MM.YYYY'));


--Стандартное все конечно работает:

--Создаем таблицу:

CREATE TABLE pro_partition_names
( num_id int,
oper_date date,
docnum number
)
PARTITION BY RANGE(oper_date)
(partition p201705 values less than (to_date('01.06.2017','DD.MM.YYYY')) tablespace TBLSP1,
partition p201706 values less than (to_date('01.07.2017','DD.MM.YYYY')) tablespace TBLSP1,
partition p201707 values less than (to_date('01.08.2017','DD.MM.YYYY')) tablespace TBLSP1,
partition p201708 values less than (to_date('01.09.2017','DD.MM.YYYY')) tablespace TBLSP1,
partition p_max values less than (maxvalue) tablespace TBLSP1
);

--создаем временную таблицу:

CREATE GLOBAL TEMPORARY TABLE pro_partition_names_tmp
( num_id int,
oper_date date,
docnum number
);

-- Это все работает:

insert into pro_partition_names partition for ('23.06.2017')
values (1, to_date('11.05.2017', 'dd.mm.yyyy'), 25);

insert into pro_partition_names partition (p201705)
values (2, to_date('21.05.2017', 'dd.mm.yyyy'), 12);

insert into pro_partition_names partition for ('23.07.2017')
values (3, to_date('16.06.2017', 'dd.mm.yyyy'), 15);

insert into pro_partition_names partition (p201706)
values (5, to_date('22.06.2017', 'dd.mm.yyyy'), 33);

insert into pro_partition_names partition for ('23.08.2017')
values (3, to_date('16.07.2017', 'dd.mm.yyyy'), 15);

insert into pro_partition_names partition (p201707)
values (5, to_date('22.07.2017', 'dd.mm.yyyy'), 33);


select * from pro_partition_names partition (p201706);

select * from pro_partition_names partition for ('15.06.2017');

select * from pro_partition_names partition for ('01.07.2017');

alter table pro_partition_names exchange partition p201707 with table pro_partition_names_tmp without validation ;
...
Рейтинг: 0 / 0
Составное имя партиции ???
    #39487100
gsvg,

в статичном SQL имена всех объектов должны быть известны до компиляции кода.
если есть необходимость динамически подставлять значения имен таблиц, секций, полей, то и запрос должен быть - динамическим.
...
Рейтинг: 0 / 0
Составное имя партиции ???
    #39487427
gsvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Ответ понял.

Можете привести простой пример динамического Iinsert в секцию, Delete секции или Exchange секция таблица на моих таблицах?

Заранее благодарен.

Начало понимаю запроса понимаю, а далее ......

Может Так ?

EXECUTE IMMEDIATE 'insert into pro_partition_names partition (P' ||to_char(t.oper_date,'YYYY.MM') || ')
SELECT num_id , oper_date , docnum number
FROM pro_partition_names_tmp t; ' ;
...
Рейтинг: 0 / 0
Составное имя партиции ???
    #39487431
gsvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Ответ понял.

Можете привести простой пример динамического Iinsert в секцию, Delete секции или Exchange секция таблица на моих таблицах?

Заранее благодарен.

Начало понимаю запроса понимаю, а далее ......

Может Так ?

EXECUTE IMMEDIATE INSERT INTO pro_partition_names PARTITION (P' || TO_CHAR(t.oper_date,'YYYY.MM') || ')
SELECT num_id , oper_date , docnum number
FROM pro_partition_names_tmp t; ' ;


EXECUTE IMMEDIATE 'ALTER TABLE pro_partition_names EXCHANGE PARTITION P'
|| TO_CHAR(SYSDATE,'YYYY.MM') || ') WITH TABLE pro_partition_names_tmp WITHOUT VALIDATION' ;
...
Рейтинг: 0 / 0
Составное имя партиции ???
    #39487470
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gsvg--Здравствуйте.

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production


--Подскажите, как можно обойти ограничение указывания конкретного имени партиции?
..
select * from pro_partition_names partition for ('01.07.2017');
..
дык сам же и спросил и .. ответил
...
Рейтинг: 0 / 0
Составное имя партиции ???
    #39487522
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishgsvg select * from pro_partition_names partition for ('01.07.2017');
..
дык сам же и спросил и .. ответил
Объясните кто-нибудь коллеге gsvg что такое nls-зависимость и для чего нужны date literal...
...
Рейтинг: 0 / 0
Составное имя партиции ???
    #39487672
gsvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо. Разобрался.

Вопрос только остался один.

Таблицы TMP похоже нельзя использовать в обмене:

EXECUTE IMMEDIATE 'ALTER TABLE pro_partition_names EXCHANGE PARTITION (p'||TO_CHAR(coalesce(l_oper_date,TRUNC(SYSDATE)),'YYYYMM')||') WITH TABLE pro_partition_names_tmp WITHOUT VALIDATION';

Выдает ошибку: ORA-14132 "table cannot be used in EXCHANGE" .
...
Рейтинг: 0 / 0
Составное имя партиции ???
    #39487677
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gsvgРазобрался.
Вопрос только остался один.
Таблицы TMP похоже нельзя использовать в обмене:

А говорил - "разобрался"...
TMP-таблицы они как и где хранятся?
А exchange что с чем меняет?
Так понятнее?
...
Рейтинг: 0 / 0
Составное имя партиции ???
    #39487692
gsvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, вы правы.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составное имя партиции ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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