为什么此CREATE TABLE语句导致“ORA-00922缺失或无效选项”?

时间:2011-12-05 14:05:25

标签: sql oracle oracle-sqldeveloper

我使用SQL Developer(工具 - >卸载数据库)从一个Oracle数据库导出了一个模式。它创建了类似于这个的“创建表”语句:

CREATE TABLE "APP_USER" 
   (    "ID" NUMBER(*,0), 
    "USERNAME" VARCHAR2(200), 
    "PASSWORD" NVARCHAR2(200), 
    "TYPE" VARCHAR2(20), 
    "FIRST_NAME" VARCHAR2(100), 
    "LAST_NAME" VARCHAR2(100)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "LIS_DATA" ;

但是当我尝试在SQL Developer上的另一个数据库上执行代码时,它会触发“ORA-00922缺失或无效选项”。

显然查询的存储部分有问题(以“SEGMENT”开头,以“DEFAULT”结尾),因为如果删除它就可以了。但究竟是什么呢?

我只是一个恰好与Oracle合作的应用程序开发人员。我对SQL很好,但是这个Oracle存储参数对我来说是个中文。另外,我很困惑,SQL Developer生成无效代码......

2 个答案:

答案 0 :(得分:8)

我不熟悉“立即创建片段”。它似乎是一个11G的功能。也许您正在尝试在旧版本数据库上使用11G功能创建表。

答案 1 :(得分:-2)

来自HERE

  

ORA-00922:选项缺失或无效原因:

     

无效选项是   在定义列或存储子句时指定。中的有效选项   指定列是非NULL以指定列不能   包含任何NULL值。只有约束可能遵循数据类型。   在DATE或LONG数据类型上指定最大长度也会导致   这个错误。操作:更正语法。删除错误选项或   列或存储规范中的长度规范。