我使用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生成无效代码......
答案 0 :(得分:8)
我不熟悉“立即创建片段”。它似乎是一个11G的功能。也许您正在尝试在旧版本数据库上使用11G功能创建表。
答案 1 :(得分:-2)
来自HERE:
ORA-00922:选项缺失或无效原因:
无效选项是 在定义列或存储子句时指定。中的有效选项 指定列是非NULL以指定列不能 包含任何NULL值。只有约束可能遵循数据类型。 在DATE或LONG数据类型上指定最大长度也会导致 这个错误。操作:更正语法。删除错误选项或 列或存储规范中的长度规范。