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

发布于 2024-12-19 19:51:58 字数 878 浏览 0 评论 0原文

我已使用 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 生成无效代码感到困惑......

I have exported a schema from one Oracle database using SQL Developer (tools -> unload database). It has created "create table" statements similar to this one :

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" ;

But when I try to execute the code on another database, also from SQL Developer, it fires an "ORA-00922 missing or invalid option".

Apparently there is something wrong with the storage section of the query (starting with "SEGMENT" and ending with "DEFAULT)" because if I remove it it works. But what is it exactly ?

I am just an application developer who happens to have to work with Oracle. I'm ok with SQL but this Oracle storage parameters stuff is Chinese to me. Plus I am puzzled that SQL Developer generates invalid code...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

比忠 2024-12-26 19:51:58

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

I'm not familiar with "segment creation immediate". It seems to be a 11G feature. Maybe you are trying to create a table using 11G features on an older version database.

仅一夜美梦 2024-12-26 19:51:58

来自此处

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

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

From HERE:

ORA-00922: missing or invalid option Cause:

An invalid option was
specified in defining a column or storage clause. The valid option in
specifying a column is NOT NULL to specify that the column cannot
contain any NULL values. Only constraints may follow the datatype.
Specifying a maximum length on a DATE or LONG datatype also causes
this error. Action: Correct the syntax. Remove the erroneous option or
length specification from the column or storage specification.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文