oracle – 不能在CREATE TABLE中使用内联约束

前端之家收集整理的这篇文章主要介绍了oracle – 不能在CREATE TABLE中使用内联约束前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Oracle中有以下作为CREATE TABLE:

CREATE TABLE cs2_users (
    empnum     varchar2(12) PRIMARY KEY,toolsId    varchar2(20) 
        CONSTRAINT nn_cs2_users_toolsId NOT NULL
        CONSTRAINT fk_cs2_users_users FOREIGN KEY REFERENCES users.userid,admin      number(1,0) DEFAULT 0
        CONSTRAINT nn_cs2_users_admin NOT NULL
        CONSTRAINT ck_cs2_users_admin (admin IN (0,1)),givenname  varchar2(30) NOT NULL,middlename varchar2(30),sn         varchar2(30) NOT NULL,mail       varchar2(50) NOT NULL
);

但是它失败并出现此错误

ERROR at line 5:
ORA-02253: constraint specification not allowed here`

当我使用sql * Plus连接时,这是版本信息:

sql*Plus: Release 11.2.0.3.0 Production on Tue Dec 18 16:38:27 2012

Copyright (c) 1982,2011,Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning,OLAP,Data Mining and Real Application Testing options

救命?

解决方法

如果要指定内联约束,则该定义与列的定义分开.如果要创建CHECK约束,则需要指定约束的类型.并且您的外键约束需要指定您引用的列.因此,例如,这将起作用

sql> create table users( userid varchar2(20) primary key );

Table created.


sql> CREATE TABLE cs2_users (
  2      empnum     varchar2(12) PRIMARY KEY,3      toolsId    varchar2(20) constraint nn_cs2_users_toolsId NOT NULL,4          CONSTRAINT fk_cs2_users_users FOREIGN KEY(toolsId) REFERENCES users(userid),5      admin      number(1,0) DEFAULT 0 constraint nn_cs2_users_admin NOT NULL,6          CONSTRAINT ck_cs2_users_admin CHECK(admin IN (0,7      givenname  varchar2(30) NOT NULL,8      middlename varchar2(30),9      sn         varchar2(30) NOT NULL,10      mail       varchar2(50) NOT NULL
 11  );

Table created.

虽然看起来很奇怪,toolsId引用了用户的userId列.您似乎更希望toolsId列从工具表中引用toolsId列,或者如果要从用户引用userId列,则希望将列命名为userId.但后来我会问为什么你有一个单独的cs2_users列而不是简单地将这些信息放在users表中.

猜你在找的Oracle相关文章