ORA-00922: 无法使用 jdbc 在 Oracle 中创建 table

ORA-00922 : Cannot Create table in oracle using ojdbc

我想创建以下内容table

CREATE TABLE EMPLOYEE (
    name_id varchar(255) PRIMARY KEY,
    modified_at TIMESTAMP,
    created_at TIMESTAMP
);

但是oracle报错

ORA-00922: 选项缺失或无效

我也尝试了以下 SQL 请求,但出现了同样的问题

CREATE TABLE EMPLOYEE (
    name_id varchar(255),
    modified_at TIMESTAMP,
    created_at TIMESTAMP,
    CONSTRAINT EMPLOYEE UNIQUE (name_id)
);

使用 java 代码和驱动程序 ojdbc6-11.2.0.4.jar

执行的请求

我的 sql 有什么问题吗?

CREATE TABLE EMPLOYEE (
   name_id varchar(255) PRIMARY KEY,
   modified_at TIMESTAMP,
   created_at TIMESTAMP
);
CREATE TABLE EMPLOYEE (
  name_id varchar(255),
  modified_at TIMESTAMP,
  created_at TIMESTAMP,
  CONSTRAINT EMPLOYEE UNIQUE (name_id)
);

is there anything wrong in my sql ?

不,它工作正常db<>fiddle

您唯一可以更改的两件事是:

  • 使用 VARCHAR2 而不是 VARCHAR
  • 将约束命名为与 table 不同的名称。
CREATE TABLE EMPLOYEE (
    name_id     VARCHAR2(255),
    modified_at TIMESTAMP,
    created_at  TIMESTAMP,
    CONSTRAINT EMPLOYEE__name_id__u UNIQUE (name_id)
);

The request where executed using java code and the driver ojdbc6-11.2.0.4.jar

如果您是 运行 通过 JDBC 的语句,请删除末尾的分号。分号是 SQL/Plus(和 SQL 开发人员)中的语句终止符,但是当您使用 JDBC 和类似的(当您只永远传递单个语句,因此不需要终止符)。

您可以使用如下内容代替内联 pk 声明:

CREATE TABLE EMPLOYEE (
   name_id varchar(255) PRIMARY KEY,
   modified_at TIMESTAMP,
   created_at TIMESTAMP
)
ALTER TABLE EMPLOYEE
ADD CONSTRAINT employee_pk PRIMARY KEY (name_id);