Нечетные разделы, использующие last_day - PullRequest
1 голос
/ 25 ноября 2010

Привет, ребята Я пытаюсь автоматизировать процесс разбиения здесь, и хорошо превращается во что-то странное. Почему бы не следовать этой работе?

create table flp_aa (cdate date, value varchar2(255))
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64M
           )
LOGGING
PARTITION BY RANGE (cdate)
(  
  PARTITION flp_aa_1010 VALUES LESS THAN (last_day(to_date('20101101', 'YYYYMMDD')))
    NOLOGGING
    NOCOMPRESS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64M
                NEXT             512K
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
                )
)

Идея состоит в том, чтобы использовать last_day(to_date('20101101', 'YYYYMMDD')), чтобы каждый красивый раздел заканчивался в последний день этого месяца, и все были довольны. Однако я получаю ORA-14019 при попытке выполнить этот код ...

[UPDATE]

Чертовски странно:

Это Работа :

  (...)
  PARTITION flp_aa_1010 VALUES LESS THAN (to_date('20101101', 'YYYYMMDD'))
  (...)

Это не работает:

  (...)
  PARTITION flp_aa_1010 VALUES LESS THAN (last_day(to_date('20101101', 'YYYYMMDD')))
  (...)

И этот не повторяется :

  (...)
  PPARTITION flp_aa_1010 VALUES LESS THAN to_date(last_day(to_date('201010','YYYYMM'))))
  (...)

Что за утка? какой класс я здесь пропустил? Разве вывод всех этих функций не одинаков?

Может ли кто-нибудь просветить меня?

ура

е.

1 Ответ

1 голос
/ 25 ноября 2010

Как вы указали в ссылке:

элемент, связанный с разделом, должен быть одним из следующих элементов: строка, литерал даты или интервала, число или MAXVALUE

вызов функции(LAST_DAY) не является строкой, датой-временем или литералом интервала, числом или MAXVALUE.Правда, TO_DATE - это вызов функции, но это разрешено как исключение, потому что традиционно это был единственный способ генерировать литерал DATE (теперь вы можете использовать формат ANSI DATE '2010-11-26', но мало кто знаеттот).См. документацию .

Однако в момент, когда вы генерируете значение '20101101', вы можете применить LAST_DAY и использовать вместо этого результат - что-то вроде:

'... VALUES LESS THAN (' || TO_CHAR (LAST_DAY (...), 'YYYYMMDD') || ')...'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...