4

OracleのCREATETABLEとして次のものがあります。

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

ヘルプ?

4

1 に答える 1

5

インライン制約を指定する場合、その定義は列の定義とは別のものです。制約を作成する場合は、制約のタイプを指定する必要があります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参照するのは奇妙に思えますが。列がテーブルの列を参照するようにしたい場合や、からの列を参照する場合のように列に名前を付けたい場合があります。しかし、この情報を単にテーブルに配置するのではなく、なぜ別の列があるのか​​疑問に思います。userIduserstoolsIdtoolsIdtoolsuserIduserIduserscs2_usersusers

于 2012-12-18T21:50:11.433 に答える