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:缺少右括号
如何更正声明?
答案 0 :(得分:0)
您可以使用http://www.dpriver.com/pp/sqlformat.htm
等格式设置工具验证您的SQLauto_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)
);