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

标签 oracle sqlplus

我将以下内容作为 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,1)),
  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来自 users 的专栏.您似乎更可能想要 toolsId列引用 toolsId来自 tools 的列表或者您想将该列命名为 userId如果您想引用 userId来自 users 的专栏.但是我会质疑为什么你有一个单独的 cs2_users列而不是简单地将此信息放入 users table 。

关于oracle - 不能在 CREATE TABLE 中使用内联约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13941938/

相关文章:

sql - EXISTS 子句和 JOIN

oracle - 确定相关 tnsnames.ora 文件的位置

sql - SQL 脚本中的条件

windows - 如何将括号发送到由括号包围的管道中?

sql - Oracle SQL 中仅排除一个 MIN 值

Java 堆行为

oracle - 同时使用Oracle CBO和Oracle Hint会有什么效果?

sql - Oracle - 像 NUMBER 一样对 VARCHAR2 字段进行排序 - 我找到了一个解决方案,需要对此进行解释

sql - "+"位于列数据末尾?

.net - Oracle SQLPLUS 是否有 .Net 接口(interface)?