在Oracle BD中创建表但出错

时间:2014-01-24 18:33:15

标签: sql oracle ddl

CREATE TABLE employees (
  id         INT NOT NULL auto_increment PRIMARY KEY (ID),
  first_name VARCHAR(20) DEFAULT NULL,
  last_name  VARCHAR(20) DEFAULT NULL,
  salary     INT         DEFAULT NULL);

我认为这是在Oracle数据库中创建表的正确查询..但是它给出了以下错误:

  

ORA-00907:缺少右括号

如何更正声明?

4 个答案:

答案 0 :(得分:0)

您可以使用http://www.dpriver.com/pp/sqlformat.htm

等格式设置工具验证您的SQL

auto_increment似乎是一个专有的MySQL扩展,所以它对Oracle无效。

另外,“id int not null auto_increment primary key(id)”不需要最后一个“(id)”

使用Oracle,你应该尝试这样的事情

    CREATE SEQUENCE seq;

CREATE TABLE employees
  (
     id         INTEGER NOT NULL PRIMARY KEY,
     first_name VARCHAR2(20) DEFAULT NULL,
     last_name  VARCHAR2(20) DEFAULT NULL,
     salary     INTEGER DEFAULT NULL
  );

INSERT INTO employees
VALUES      (seq.NEXTVAL,
         'name',
         'last name',
         1);  

有时,SQL很花哨,因为即使有标准(ANSI),大多数DBMS供应商都会将自己的专有扩展添加到创建自己语言的SQL中,所以很少有这种情况可以将一个SQL从一个数据库移植到另一个数据库而不需要任何改变。

此外,这是一个非常无用的错误消息。它至少可以说出哪个位置。 (也就是说,没有缺少的括号,但是有一个意外的标记)

答案 1 :(得分:0)

已编辑:新功能12c

CREATE TABLE employees(
  id          NUMBER GENERATED ALWAYS AS IDENTITY,
  first_name  VARCHAR2(30)
etc.
);

为什么要默认为null?

VARCHAR数据类型与VARCHAR2数据类型同义。为避免可能的行为更改,请始终使用VARCHAR2数据类型来存储可变长度的字符串。

答案 2 :(得分:0)

替换

  id         INT NOT NULL auto_increment PRIMARY KEY (ID),

  id         INT NOT NULL auto_increment PRIMARY KEY,

答案 3 :(得分:0)

这更有效

CREATE TABLE EMPLOYEES_T(
ID NUMBER,
FIRST_NAME VARCHAR2(20) DEFAULT NULL,
LAST_NAME VARCHAR2(20) DEFAULT NULL,
SALARY INTEGER DEFAULT NULL,
CONSTRAINT PK_EMPLOYEES_T PRIMARY KEY(ID)
);