当 运行 此脚本时获取 'missing or invalid option'

Getting 'missing or invalid option' when running this script

当 运行 这个脚本时,我得到一个 'missing or invalid option'(完整的错误是:ORA-00922:缺少或无效的选项 ORA-06512:在“SYS. WWV_DBMS_SQL_APEX_200100”,第 581 行 ORA-06512:在“SYS.DBMS_SYS_SQL”,第 1658 行 ORA-06512:在“SYS.WWV_DBMS_SQL_APEX_200100”,第 567 行 ORA-06512:在“APEX_200100.WWV_FLOW_DYNAMIC_EXEC”,第 2127 行 )。有问题的语句是“CREATE TABLE manufacturer (m_name VARCHAR2(50), m_id。”我应该怎么做才能修复它?

DROP TABLE vehicles CASCADE constraints;
DROP TABLE suppliers CASCADE constraints;
DROP TABLE manufacturer CASCADE constraints;

CREATE TABLE vehicles
    (VIN        VARCHAR2(17),
     brand      VARCHAR2(20),
     model      VARCHAR2(20),
     color      VARCHAR2(10),
     PRIMARY KEY (VIN, brand, model, color)
    );

CREATE TABLE suppliers
    (s_name     VARCHAR2(20), 
     s_id       VARCHAR2(15), 
     part_id    VARCHAR2(20),
     supply_date    VARCHAR2(15),    
     PRIMARY KEY (s_name, s_id, part_id, supply_date)
    );

CREATE TABLE manufacturer
    (m_name     VARCHAR2(50), 
     m_id       VARCHAR2(15), 
     s_name     VARCHAR2(20),
     VIN        VARCHAR2(17)),
     PRIMARY KEY (m_name, m_id)),
      FOREIGN KEY (s_name) REFERENCES suppliers
        ON DELETE SET NULL
     FOREIGN KEY (VIN) REFERENCES vehicles
        ON DELETE SET NULL
    );


--LOAD DATABASE

INSERT INTO vehicles VALUES ('JM1CW2BL4D0154490', 'Mazda', 'Mazda5', 'Brown');
INSERT INTO suppliers VALUES ('MNAO Supplier', 'MNAO', '308', '01/28/2013');
INSERT INTO manufacturer VALUES ('Mazda Motor Corp', 'MZDAY', 'MNAO Supplier', 'JM1CW2BL4D0154490');


车辆识别码 (VIN) 是唯一的;您不需要任何其他列来创建主键,因此您的 vehicles table 可以是:

CREATE TABLE vehicles(
  VIN   VARCHAR2(17)
        CONSTRAINT vehicles__vin__pk PRIMARY KEY,
  brand VARCHAR2(20)
        CONSTRAINT vehicles__brand__nn NOT NULL,
  model VARCHAR2(20)
        CONSTRAINT vehicles__model__nn NOT NULL,
  color VARCHAR2(10)
        CONSTRAINT vehicles__color__nn NOT NULL
);

同样,您可能只想将一列作为 suppliers 中的主键(并且应将日期值存储为 DATE 数据类型):

CREATE TABLE suppliers (
  s_name      VARCHAR2(20)
              CONSTRAINT suppliers__s_name__pk PRIMARY KEY,
  s_id        VARCHAR2(15)
              CONSTRAINT suppliers__s_id__nn NOT NULL,
  part_id     VARCHAR2(20)
              CONSTRAINT suppliers__part_id__nn NOT NULL,
  supply_date DATE
              CONSTRAINT suppliers__supply_date__nn NOT NULL
);

那么你的manufacturertable可以是:

CREATE TABLE manufacturer(
  m_name     VARCHAR2(50), 
  m_id       VARCHAR2(15), 
  s_name     VARCHAR2(20)
             CONSTRAINT manufacturer__s_name__fk
               REFERENCES suppliers (s_name) ON DELETE SET NULL,
  VIN        VARCHAR2(17)
             CONSTRAINT manufacturer__vin__fk
               REFERENCES vehicles (vin) ON DELETE SET NULL,
  CONSTRAINT manufacturer__m_name__m_id__pk PRIMARY KEY (m_name, m_id)
);

(同样,您可能想要更改它,因此只有一个列是主键。)

然后你可以插入你的数据:

INSERT INTO vehicles VALUES ('JM1CW2BL4D0154490', 'Mazda', 'Mazda5', 'Brown');
INSERT INTO suppliers VALUES ('MNAO Supplier', 'MNAO', '308', DATE '2013-01-28');
INSERT INTO manufacturer VALUES ('Mazda Motor Corp', 'MZDAY', 'MNAO Supplier', 'JM1CW2BL4D0154490');

(并且不要将日期作为字符串传递,使用 TO_DATE 或日期文字。)

db<>fiddle here