我的双父母表是人和艺术品。我按如下方式创建了他们的表:
create table person (
person_id number(20) primary key,
name varchar2(20),
address varchar(50),
contact_number number (10)
);
和其他
create table artwork (
artwork_id number primary key,
barcode char (20),
title varchar2(20),
description varchar2(50));
当我尝试让子表投票时,它会发出此错误。
create table vote
(
vote_id number(7) NOT NULL,
artwork_id number(20),
person_id number(20),
PRIMARY KEY (vote_id),
FOREIGN KEY (artwork_id) REFERENCES artwork(artwork_id),
FOREIGN KEY ( person_id) REFERENCES Person(person_id)
);
SP2-0734:未知命令开头" FOREIGN KE ..." - 其余的行被忽略。
答案 0 :(得分:2)
您忘记在constraint
之前提及foreign key
:
create table vote
(
vote_id number(7) NOT NULL,
artwork_id number(20),
person_id number(20),
PRIMARY KEY (vote_id),
CONSTRAINT fk_artwork_id FOREIGN KEY (artwork_id) REFERENCES artwork(artwork_id),
CONSTRAINT fk_person_id FOREIGN KEY ( person_id) REFERENCES Person(person_id)
);
<强>语法强>
使用CREATE TABLE语句创建外键的语法 是:
CREATE TABLE table_name
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
);
<强>演示强>
<强>解释强>
默认情况下,SQL Plus不喜欢空白行。但是,我们可以轻松配置SQL Plus环境以忽略它们:
SQL> set sqlblanklines on
我们也可以将设置放在我们的glogin.sql文件中(假设我们允许编辑它,但情况并非如此)。
答案 1 :(得分:1)
在创建投票表时,在定义约束之前删除该空行:
create table vote
(
vote_id number(7) NOT NULL,
artwork_id number(20),
person_id number(20),
PRIMARY KEY (vote_id),
FOREIGN KEY (artwork_id) REFERENCES artwork(artwork_id),
FOREIGN KEY ( person_id) REFERENCES Person(person_id)
);
任何空白行都会阻止SQL * Plus接受输入行。
如果您希望它避免此次运行:
set sqlblanklines on
在任何其他指示之前。