oracle建表时出现缺失右括号问题

huihui28 2008-07-10 11:20:54
在iSQL*PLUS中输入如下内容建表,该表参照的表都已经建好

create table tb_fault_info
(
fid int identity(1,1) primary key,
fsim char(40) not null,
fdet char(600) not null,
company char(40) not null,
ftime datetime not null,
gid int foreign key references tb_group(gid),
fsid int foreign key references tb_fault_state(fsid),
addf char(600),
fnum char(10) not null,
fc int not null
);

出现如下问题:
fid int identity(1,1) primary key,
*

第 3 行出现错误:
ORA-00907: 缺失右括号

都改了一天了,希望各位朋友帮帮忙,我很着急




...全文
2334 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bai_jiong 2008-07-11
  • 打赏
  • 举报
回复
7楼的,你错了吧,约束与外键是可以在创建表的时候一起建立的.
tan_jianhui 2008-07-11
  • 打赏
  • 举报
回复
oracle有identity(1,1)这个概念吗?
oracle中是用sequence实现的吧
dbcxbj 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gisinfo 的回复:]
2个错误

一在SQLSERVER中是可以用那实现自赠

在ORACLE中序列加触发器实现一个自增字段


还有约束问题

外键
不能在创建语句中建立


建后
ALTER TABLE 表名 ADD CONSTRAINT 外名 FOREIGN KEY(字段) REFERENCES tb_fault_state(fsid);

就行了

[/Quote]
gisinfo 2008-07-11
  • 打赏
  • 举报
回复
2个错误

一在SQLSERVER中是可以用那实现自赠

在ORACLE中序列加触发器实现一个自增字段


还有约束问题

外键
不能在创建语句中建立


建后
ALTER TABLE 表名 ADD CONSTRAINT 外名 FOREIGN KEY(字段) REFERENCES tb_fault_state(fsid);

就行了
bai_jiong 2008-07-11
  • 打赏
  • 举报
回复
楼主的语法出错,identity函数是SQLSERVER中的
star_guan2008 2008-07-11
  • 打赏
  • 举报
回复
语法问题
luyuen 2008-07-11
  • 打赏
  • 举报
回复
语法问题
ruihuahan 2008-07-11
  • 打赏
  • 举报
回复
fid int identity(1,1) primary key
===================================
sql server 的 identity 语法在 oracle 中不能用。
changjiangzhibin 2008-07-11
  • 打赏
  • 举报
回复
Oracle使用序列,由于它更灵活机动
xiedurensheng 2008-07-11
  • 打赏
  • 举报
回复
oracle 是可以在建表时创建外键的
不过需要注意:如果要在B表上引用A表的字段ID来创建一个外键,那么A表的ID上必须有主键(也就是说Id必须是A表的主码)
还有就是LZ创建外键的写法也不对,ORACLE的语法和SQL大不相同的

下面举个例子

先创建两个备用表:
create table tb_group(gid int,PRIMARY KEY(GID));--GID是主键
create table tb_fault_state(fsid int,PRIMARY KEY(fsid));--FSID是主键

接下来创建LZ要创建的这张表:
create table tb_fault_info
(
GID INT not null,
FSID INT not null,
fsim char(40) not null,
fdet char(600) not null,
company char(40) not null,
ftime date not null,
addf char(600),
fnum char(10) not null,
fc int not null ,
foreign key(GID) references tb_group(gid),
foreign key (fsid) references tb_fault_state(fsid)
);

至于LZ要求的自增列,ORACLE是不能用IDENTITY的,可以用SEQUENCE
由于oracle是序列型的,所以不是在建表的时候递增的,可以用以下方法:

1、先创建一个SEQUENCE
create sequence SEQ_D
minvalue 1
maxvalue 99999
start with 21
increment by 1
cache 20;
2、在向表插数据时插入自增列
insert into tb_fault_info values(SEQ_D,'字段值',...)
xiedurensheng 2008-07-11
  • 打赏
  • 举报
回复
除了identity 和 FOREIGN KEY
oracle里时间类型应该是date不是datetime

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧