0

私はデータベースにまったく慣れておらず、Oracleの構文に多少の混乱があります。それに付随する整合性制約のあるテーブルを作成しようとしています。

これが私のコードです:

   CREATE TABLE  Students 
( 
id                INTEGER, 
name              CHAR(10)    NOT NULL,  
classification    CHAR(10)    NOT NULL, 
hours             INTEGER, 
gpa               NUMBER(3,2) NOT NULL, 
mentor            INTEGER, 

CONSTRAINT IC1 CHECK (PRIMARY KEY (id))
CONSTRAINT IC2 CHECK (classification = 'freshman' or classification = 'sophomore' or classification = 'junior' or classification = 'senior')
CONSTRAINT IC3 CHECK (gpa >= 0 AND gpa <= 4) 
CONSTRAINT IC4 CHECK (classification = 'junior' AND hours >= 55 AND hours <= 84)  ); 

ただし、コードを実行すると、次のようになります。

SQL> CONSTRAINT IC1 CHECK (PRIMARY KEY (id))
SP2-0734: unknown command beginning "CONSTRAINT..." - rest of line ignored.
SQL> CONSTRAINT IC2 CHECK (classification = 'freshman' or classification = 'sophomore' or classification = 'junior' or classification = 'senior')
SP2-0734: unknown command beginning "CONSTRAINT..." - rest of line ignored.
SQL> CONSTRAINT IC3 CHECK (gpa >= 0 AND gpa <= 4)
SP2-0734: unknown command beginning "CONSTRAINT..." - rest of line ignored.
SQL> CONSTRAINT IC4 CHECK (classification = 'junior' AND hours >= 55 AND hours <= 84)  );
SP2-0734: unknown command beginning "CONSTRAINT..." - rest of line ignored.
SP2-0044: For a list of known commands enter HELP
and to leave enter EXIT. 

誰かが私の制約構文を手伝ってくれますか?

4

1 に答える 1

1

主キー制約の宣言に構文エラーがあります。CHECK主キー制約はチェック制約ではないため、キーワードは必要ありません。また、各インライン制約定義の後にコンマが必要です

SQL> ed
Wrote file afiedt.buf

  1     CREATE TABLE  Students
  2  (
  3  id                INTEGER,
  4  name              CHAR(10)    NOT NULL,
  5  classification    CHAR(10)    NOT NULL,
  6  hours             INTEGER,
  7  gpa               NUMBER(3,2) NOT NULL,
  8  mentor            INTEGER,
  9  CONSTRAINT IC1 PRIMARY KEY (id),
 10  CONSTRAINT IC2 CHECK (classification = 'freshman' or classification = 'sophomore' or classification = 'junior' or classification = 'senior'),
 11  CONSTRAINT IC3 CHECK (gpa >= 0 AND gpa <= 4) ,
 12* CONSTRAINT IC4 CHECK (classification = 'junior' AND hours >= 55 AND hours <= 84)  )
SQL> /

Table created.

使用しているフロントエンドツールとツールの設定によっては、SQLステートメントの途中に完全に空白行が表示されないようにすることができます。これは、SQLの観点からは完全に有効な構文です。ただし、一部のフロントエンドは、空白行を前のステートメントの終了として解釈します。

于 2013-01-31T04:30:34.657 に答える