我收到此错误,我需要你的帮助:
第2行的错误:ORA-00907:缺少右括号
CREATE TABLE users(
user_id int IDENTITY(1,1) PRIMARY KEY,
user_name varchar2(100) NOT NULL DEFAULT '',
user_password varchar2(100) NOT NULL DEFAULT '',
f_name varchar2(50) NOT NULL DEFAULT '',
l_name varchar2(50) NOT NULL DEFAULT '',
signature text NOT NULL DEFAULT '',
link varchar2(255) NOT NULL DEFAULT '',
category_id int NOT NULL DEFAULT 1
);
答案 0 :(得分:0)
oracle中没有text
数据类型。
在Oracle 12c之前,ORACLE中没有IDENTITY
修饰符。如果您使用的是Oracle 12c,请使用此
CREATE TABLE users(
user_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
user_name varchar2(100) NULL DEFAULT '',
user_password varchar2(100) NULL DEFAULT '',
f_name varchar2(50) NULL DEFAULT '',
l_name varchar2(50) NULL DEFAULT '',
signature clob NULL DEFAULT '',
link varchar2(255) NULL DEFAULT '',
category_id int NULL DEFAULT 1
);
答案 1 :(得分:0)
我认为您尝试在oracle中执行sql脚本
CREATE TABLE users(
user_id int IDENTITY(1,1) PRIMARY KEY,
user_name varchar2(100) NOT NULL DEFAULT '',
user_password varchar2(100) NOT NULL DEFAULT '',
f_name varchar2(50) NOT NULL DEFAULT '',
l_name varchar2(50) NOT NULL DEFAULT '',
signature text NOT NULL DEFAULT '',
link varchar2(255) NOT NULL DEFAULT '',
category_id int NOT NULL DEFAULT 1
);
但我们必须在oracle中执行之前进行转换 变化包括如下
答案 2 :(得分:0)
NOT NULL DEFAULT''
''
是一个空字符串,在Oracle中被视为 NULL 。因此, NOT NULL 约束但默认值再次 NULL 是没有意义的。 这是矛盾的!
您的表 DDL 存在多个问题。像这样创建表:
SQL> CREATE TABLE users(
2 user_id NUMBER PRIMARY KEY,
3 user_name VARCHAR2(100) DEFAULT 'default' NOT NULL,
4 user_password VARCHAR2(100) DEFAULT 'default' NOT NULL,
5 f_name VARCHAR2(50) DEFAULT 'default' NOT NULL,
6 l_name VARCHAR2(50) DEFAULT 'default' NOT NULL,
7 signature VARCHAR2(255) DEFAULT 'default' NOT NULL,
8 LINK VARCHAR2(255) DEFAULT 'default' NOT NULL,
9 category_id NUMBER DEFAULT 1 NOT NULL
10 );
Table created.
SQL>
关于Identity column的说明。由于您使用的是 10g 版本,因此不支持“标识”列。它是在 12c 中引入的。
因此,您需要明确使用序列。您可以在应用程序中使用旧的触发器序列方法来填充主键。在这里查看演示示例和用法http://lalitkumarb.wordpress.com/2015/01/20/auto-increment-primary-key-in-pre-12c-releases-identity-functionality/
例如,
表格强>
SQL> CREATE TABLE t (
2 ID NUMBER(10) NOT NULL,
3 text VARCHAR2(50) NOT NULL);
Table created.
SQL>
由序列 填充的PRIMARY KEY
SQL> ALTER TABLE t ADD (
2 CONSTRAINT id_pk PRIMARY KEY (ID));
Table altered.
SQL>
SEQUENCE 支持主键
SQL> CREATE SEQUENCE t_seq
2 START WITH 1000
3 INCREMENT BY 1;
Sequence created.
SQL>
TRIGGER
如果您不想在 INSERT 中输入序列,可以通过TRIGGER自动执行此序列。
SQL> CREATE OR REPLACE TRIGGER t_trg
2 BEFORE INSERT ON t
3 FOR EACH ROW
4 WHEN (new.id IS NULL)
5 BEGIN
6 SELECT t_seq.NEXTVAL
7 INTO :new.id
8 FROM dual;
9 END;
10 /
Trigger created.
SQL>
插入强>
SQL> INSERT INTO t(text) VALUES('auto-increment test 1');
1 row created.
SQL> INSERT INTO t(text) VALUES('auto-increment test 2');
1 row created.
SQL>
让我们看看我们是否有ID列自动递增所需的值 -
SQL> SELECT * FROM t;
ID TEXT
----- --------------------------------------------------
1000 auto-increment test 1
1001 auto-increment test 2
SQL>
因此,ID列现在以值1000开始,并以随后的插入递增1。