简单的SQL问题,无法理解I';I’得到这些错误是错误的——ORA-00942/907/922
这应该是一个简单的SQL项目,但我还停留在第一步。我以前从未使用过SQL,所以我很迷茫。有人能告诉我我做错了什么导致了这些错误吗 文件如下:简单的SQL问题,无法理解I';I’得到这些错误是错误的——ORA-00942/907/922,sql,oracle,Sql,Oracle,这应该是一个简单的SQL项目,但我还停留在第一步。我以前从未使用过SQL,所以我很迷茫。有人能告诉我我做错了什么导致了这些错误吗 文件如下: SPOOL output.log; DROP TABLE rental CASCADE CONSTRAINTS; DROP TABLE movie CASCADE CONSTRAINTS; DROP TABLE customer CASCADE CONSTRAINTS; DROP TABLE distribut
SPOOL output.log;
DROP TABLE rental CASCADE CONSTRAINTS;
DROP TABLE movie CASCADE CONSTRAINTS;
DROP TABLE customer CASCADE CONSTRAINTS;
DROP TABLE distributor CASCADE CONSTRAINTS;
DROP TABLE rental_store CASCADE CONSTRAINTS;
CREATE TABLE rental (
inventory_id CHAR(10) PRIMARY KEY,
transaction_id CHAR(10) NOT NULL UNIQUE,
late DECIMAL(6,2),
damaged DECIMAL(6,2),
fail_rewind DECIMAL(6,2),
taxes DECIMAL(6,2) NOT NULL,
discount DECIMAL(6,2),
customer_id CHAR(10) NOT NULL UNIQUE,
CONTRAINT rental_FK FOREIGN KEY (customer_id) REFERENCES customer (customer_id));
CREATE TABLE movie (
title_id_number CHAR(10) PRIMARY KEY,
genre VARCHAR2(20) NOT NULL,
actor VARCHAR2(30) NOT NULL,
director VARCHAR2(30) NOT NULL,
awards VARCHAR2(30),
running_length INTEGER NOT NULL,
rating VARCHAR2(5) NOT NULL,
year_released INTEGER NOT NULL,
media_type CHAR(5) NOT NULL,
inventory_id CHAR(10) NOT NULL UNIQUE,
title VARCHAR2(30) NOT NULL,
distrib_serial INTEGER NOT NULL UNIQUE,
cat_mov_id CHAR(10) NOT NULL UNIQUE));
CREATE TABLE customer (
customer_id CHAR(10) PRIMARY KEY,
name VARCHAR2(30) NOT NULL,
address VARCHAR2(50) NOT NULL,
tele_number CHAR(10) NOT NULL UNIQUE,
rent_history INTEGER NOT NULL));
CREATE TABLE distributor (
distributor_name VARCHAR2(30) PRIMARY KEY,
catalog VARCHAR2(30) NOT NULL,
genres_offered VARCHAR2(50) NOT NULL));
CREATE TABLE rental_store (
store_name VARCHAR2(30) PRIMARY KEY,
address VARCHAR2(50) NOT NULL,
owner VARCHAR2(30) NOT NULL));
SPOOL OFF;
当然,第一次运行脚本时,您的拖放表将失败,因为您尚未创建它们。这是意料之中的,在这样的脚本中也是可以接受的 除此之外,如果要创建FK关系,则需要在创建子表之前创建父表,更正拼写错误的关键字后将看到父表
我将把它作为一个练习留给学生,让他们在第一个CREATE TABLE语句中找到拼写错误的关键字。由于表格尚不存在,
DROP
语句的错误是意料之中的。你可以放心地忽略它们
你的大多数问题都来自第二个右括号,例如
CREATE TABLE movie (
...
cat_mov_id CHAR(10) NOT NULL UNIQUE));
^ ---- here
你需要移除它们。因为外键的列列表,所以只在第一个语句中需要它
您得到的第一个(实际)错误是因为您拼写错误了CONSTRAINT
(您编写了CONSTRAINT
。需要修改完整子句
CONSTRAINT rental_FK FOREIGN KEY (customer_id) REFERENCES customer (customer_id)
^ -- the "s" was missing here
但是,您不能对不存在的表创建外键约束。因此,您需要更改create语句的顺序,以首先创建customer
表,,然后可以创建rental
表
将所有这些放在一起,您的脚本应该如下所示:
DROP TABLE rental CASCADE CONSTRAINTS;
DROP TABLE movie CASCADE CONSTRAINTS;
DROP TABLE customer CASCADE CONSTRAINTS;
DROP TABLE distributor CASCADE CONSTRAINTS;
DROP TABLE rental_store CASCADE CONSTRAINTS;
CREATE TABLE customer (
customer_id CHAR(10) PRIMARY KEY,
name VARCHAR2(30) NOT NULL,
address VARCHAR2(50) NOT NULL,
tele_number CHAR(10) NOT NULL UNIQUE,
rent_history INTEGER NOT NULL
);
CREATE TABLE rental (
inventory_id CHAR(10) PRIMARY KEY,
transaction_id CHAR(10) NOT NULL UNIQUE,
late DECIMAL(6,2),
damaged DECIMAL(6,2),
fail_rewind DECIMAL(6,2),
taxes DECIMAL(6,2) NOT NULL,
discount DECIMAL(6,2),
customer_id CHAR(10) NOT NULL UNIQUE,
CONSTRAINT rental_FK FOREIGN KEY (customer_id) REFERENCES customer (customer_id)
);
CREATE TABLE movie (
title_id_number CHAR(10) PRIMARY KEY,
genre VARCHAR2(20) NOT NULL,
actor VARCHAR2(30) NOT NULL,
director VARCHAR2(30) NOT NULL,
awards VARCHAR2(30),
running_length INTEGER NOT NULL,
rating VARCHAR2(5) NOT NULL,
year_released INTEGER NOT NULL,
media_type CHAR(5) NOT NULL,
inventory_id CHAR(10) NOT NULL UNIQUE,
title VARCHAR2(30) NOT NULL,
distrib_serial INTEGER NOT NULL UNIQUE,
cat_mov_id CHAR(10) NOT NULL UNIQUE
);
CREATE TABLE distributor (
distributor_name VARCHAR2(30) PRIMARY KEY,
catalog VARCHAR2(30) NOT NULL,
genres_offered VARCHAR2(50) NOT NULL
);
CREATE TABLE rental_store (
store_name VARCHAR2(30) PRIMARY KEY,
address VARCHAR2(50) NOT NULL,
owner VARCHAR2(30) NOT NULL
);
不相关,但是:您不想使用
CHAR
数据类型。如果您对每个字符列使用VARCHAR
,则效率更高,而且会给您带来更少的麻烦。删除表if EXISTS TABLE\u name CASCADE;我没有否决您的意见,但您的脚本到处都出错,甚至连应该工作的区域都出错了可能会失败。你应该只标记你正在使用的数据库..删除不正确的标记..请..在为你指明正确的方向以清除脚本中的第一个错误后,由于你是初学者,请允许我提供一些关于样式的建议。首先,尝试将所有保留字用大写,将所有对象名用小写除了让你的打字变得更加困难之外,没有什么真正的目的。只是把它全部放在小写字母里。其次,我会把最后的右括号移到它自己的行上,列与匹配的左括号对齐。我真的很感谢你花时间告诉我哪里出了错。我现在明白我的错误是多么简单,但当时我只能我没弄明白。我只是用你的更正做了一遍,没有问题。