Oracle d / b Ошибка создания индекса - PullRequest
3 голосов
/ 06 апреля 2011

Я получаю пропущенное выражение на приведенном ниже sql при запуске в sql developer (хотя я полагаю, что это не имеет ничего общего с клиентом oracle), хотя все вроде бы в порядке.

  CREATE UNIQUE INDEX "CRIS2"."SYS_IL0000296692C00014$$" ON "CRIS2"."AOITARGETPOINT" (
  PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "BIOSIRTDATA" 
  PARALLEL (DEGREE 0 INSTANCES 0) ;

--------------------------------------------------
Error starting at line 1 in command:
  CREATE UNIQUE INDEX "CRIS2"."SYS_IL0000296692C00014$$" ON "CRIS2"."AOITARGETPOINT" (
  PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "BIOSIRTDATA" 
  PARALLEL (DEGREE 0 INSTANCES 0) 
Error at Command Line:2 Column:2
Error report:
SQL Error: ORA-00936: missing expression
00936. 00000 -  "missing expression"
*Cause:    
*Action:

Любая помощь, пожалуйста?

Ответы [ 2 ]

5 голосов
/ 06 апреля 2011

Вам не хватает списка столбцов в операторе CREATE INDEX

  CREATE UNIQUE INDEX "CRIS2"."SYS_IL0000296692C00014$$" ON "CRIS2"."AOITARGETPOINT" 
  (-->Field List<--)
  PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "BIOSIRTDATA" 
  PARALLEL (DEGREE 0 INSTANCES 0) ;
0 голосов
/ 07 апреля 2011

Как отметил Михаил Паханцов, пропущенный список полей, очевидно, является самой большой проблемой. Но есть и другие проблемы с этим утверждением.

Возможно, вы захотите присвоить индексу реальное имя вместо использования сгенерированного системой имени. Вероятно, это просто проблема стиля, но это может сбить с толку, если вы создаете объекты, которые начинаются с SYS. (Или есть вероятность столкновения другого имени объекта с этим? Я не уверен, как Oracle подходит с его именами.)

PARALLEL (DEGREE 0 INSTANCES 0); - это синтаксис параллельного предложения из Oracle 7. Документация предупреждает "Синтаксис parallel_clause заменяет синтаксис, появившийся в более ранних выпусках Oracle. Заменяемый синтаксис все еще поддерживается для обратной совместимости, но может привести к немного отличается от того, что задокументировано ". В моем тестировании я не обнаружил никаких проблем с этим синтаксисом, но вам все равно, вероятно, следует избегать его, если это возможно.

...