Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单的SQL问题,无法理解I';I’得到这些错误是错误的——ORA-00942/907/922_Sql_Oracle - Fatal编程技术网

简单的SQL问题,无法理解I';I’得到这些错误是错误的——ORA-00942/907/922

简单的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

这应该是一个简单的SQL项目,但我还停留在第一步。我以前从未使用过SQL,所以我很迷茫。有人能告诉我我做错了什么导致了这些错误吗

文件如下:

   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;我没有否决您的意见,但您的脚本到处都出错,甚至连应该工作的区域都出错了可能会失败。你应该只标记你正在使用的数据库..删除不正确的标记..请..在为你指明正确的方向以清除脚本中的第一个错误后,由于你是初学者,请允许我提供一些关于样式的建议。首先,尝试将所有保留字用大写,将所有对象名用小写除了让你的打字变得更加困难之外,没有什么真正的目的。只是把它全部放在小写字母里。其次,我会把最后的右括号移到它自己的行上,列与匹配的左括号对齐。我真的很感谢你花时间告诉我哪里出了错。我现在明白我的错误是多么简单,但当时我只能我没弄明白。我只是用你的更正做了一遍,没有问题。