Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 неполучается добавить партицию  [new]
Ethernal
Member

Откуда:
Сообщений: 6
create table t (x int, y date)
partition by range (y) (
    partition part1 values less than (to_date('2008-05-01','yyyy-mm-dd'))
)

Table created.
все последующие конструкции не выполняются - ora-14019:

partition bound element must be one of: string, datetime or interval literal, number, or MAXVALUE
Cause: Partition bound list contained an element of invalid type (that is, not a number, non-empty string, datetime or interval literal, or MAXVALUE).
Action: Ensure that all elements of partition bound list are of valid type.

но тип вроди правильный:
alter table t add partition part2 values less than (sysdate)
/
ora-14019...

alter table t add partition part2 values less than (to_date(sysdate))
/
ora-14019

alter table t add partition part2 values less than (to_date(sysdate,'yyyy-mm-dd'))
/
ora-14019

как добавить новую партицию по системной дате?
3 июн 08, 16:45    [5753812]     Ответить | Цитировать Сообщить модератору
 Re: неполучается добавить партицию  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Ethernal
..
как добавить новую партицию по системной дате?

очевидно же - извлечь значение и использовать его в вашем DDL
Вот если бы вы и называли секции соответственно содержимому - вопроса могли бы
и не задать (имхо)
3 июн 08, 16:59    [5753976]     Ответить | Цитировать Сообщить модератору
 Re: неполучается добавить партицию  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
Ethernal
все последующие конструкции не выполняются -
ora-14019: partition bound element must be one of: string, datetime or interval literal, number, or MAXVALUE
Cause: Partition bound list contained an element of invalid type (that is, not a number, non-empty string, datetime or interval literal, or MAXVALUE).
Action: Ensure that all elements of partition bound list are of valid type.

но тип вроди правильный:
alter table t add partition part2 values less than (sysdate)
/
ora-14019...
как добавить новую партицию по системной дате?

1. В сообщении об ошибке вам совершенно однозначно указали:

partition bound element must be one of: string, datetime or interval literal, number, or MAXVALUE

Что в переводе означает:
элемент ограничивающий секцию должен быть одним из:
строка, константа типа дата-время или типа INTERVAL, число или MAXVALUE

Вы же пытаетесь обозначить границу секции с помощью функции (SYSDATE)

2. Как вы себе представляете вообще секцию, где граница постоянно изменяется
вместе ежесекундным изменением SYSDATE
3 июн 08, 18:20    [5754725]     Ответить | Цитировать Сообщить модератору
 Re: неполучается добавить партицию  [new]
Ethernal
Member

Откуда:
Сообщений: 6
1) большое спасибо всем за коментарии
2) незнаю как взять значение у функции sysdate
попробовал так:
declare 
dddd constant date := sysdate;
begin
execute immediate 'alter table t add partition part2 values less than (:dddd)';
end;
/

ora-14019 ......
3) могли бы вы написать решение?
3 июн 08, 18:38    [5754829]     Ответить | Цитировать Сообщить модератору
 Re: неполучается добавить партицию  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Ethernal
1) большое спасибо всем за коментарии
2) незнаю как взять значение у функции sysdate
попробовал так:
declare 
dddd constant date := sysdate;
begin
execute immediate 'alter table t add partition part2 values less than (:dddd)';
end;
/

ora-14019 ......
3) могли бы вы написать решение?

уже лучше ;)
1) биндовые переменные нельзя использовать в декларативной составляющей ddl

2) если таки их используете (не здесь!) - не забывайте передавать (в execute immediate) их значения

~ так (если с кавыками не вру)
execute immediate 'alter table t add partition part2 values less than to_date('''||to_char(sysdate,'ddmmyyyy')||''',''ddmmyyyy'')';
3 июн 08, 18:53    [5754892]     Ответить | Цитировать Сообщить модератору
 Re: неполучается добавить партицию  [new]
Ethernal
Member

Откуда:
Сообщений: 6
1) сново спасибо :), все заработало.
2) а почему так не работает? -
alter table t add partition part4 values less than (to_date(to_char(sysdate,'ddmmyyyy'),'ddmmyyyy'));
тут сново ora-14019
3) теперь вопрос как эти партиции вменяемо называть...
3 июн 08, 19:08    [5754960]     Ответить | Цитировать Сообщить модератору
 Re: неполучается добавить партицию  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Ethernal
1) сново спасибо :), все заработало.
2) а почему так не работает? -
alter table t add partition part4 values less than (to_date(to_char(sysdate,'ddmmyyyy'),'ddmmyyyy'));
тут сново ora-14019
3) теперь вопрос как эти партиции вменяемо называть...

2) вот вы посмотрите - какая команда исполняется и увидите, что там значение стоит,
а у вас?
3) назвать - напр.
.. part'||to_char(sysdate,'yyyymmdd')||'..
3 июн 08, 19:13    [5754988]     Ответить | Цитировать Сообщить модератору
 Re: неполучается добавить партицию  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
Ethernal
2) а почему так не работает? -
alter table t add partition part4 values less than (to_date(to_char(sysdate,'ddmmyyyy'),'ddmmyyyy'));
тут сново ora-14019

(ПОВТОРНО)

1. В сообщении об ошибке вам совершенно однозначно указали:

ora-14019 partition bound element must be one of: string, datetime or interval literal, number, or MAXVALUE

Что в переводе означает:
элемент ограничивающий секцию должен быть одним из:
строка, константа типа дата-время или типа INTERVAL, число или MAXVALUE

Вы же пытаетесь обозначить границу секции с помощью функции (SYSDATE)

2. Как вы себе представляете вообще секцию, где граница постоянно изменяется
вместе ежесекундным изменением SYSDATE
3 июн 08, 19:15    [5754997]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить