Sql 获得';缺少或无效选项';运行此脚本时
运行此脚本时,我得到了一个“缺少或无效选项”(完整错误是:ORA-00922:缺少或无效选项ORA-06512:at“SYS.WWV_DBMS_SQL_APEX_200100”,第581行ORA-06512:at“SYS.DBMS_SYS_SQL_SQL_SQL_200100”,第1658行ORA-06512:at“SYS.wv_DBMS_SQL_APEX_200100”,第567行ORA-06512:at“APEX_200100.WWV_FLOW_DYNAMIC_EXEC”,第2127行)。有问题的语句是“createtablemanufacturer(m_-name VARCHAR2(50),m_-id)”,我应该如何修复它Sql 获得';缺少或无效选项';运行此脚本时,sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,运行此脚本时,我得到了一个“缺少或无效选项”(完整错误是:ORA-00922:缺少或无效选项ORA-06512:at“SYS.WWV_DBMS_SQL_APEX_200100”,第581行ORA-06512:at“SYS.DBMS_SYS_SQL_SQL_SQL_200100”,第1658行ORA-06512:at“SYS.wv_DBMS_SQL_APEX_200100”,第567行ORA-06512:at“APEX_200100.WWV_FLOW_DYNAMIC_EXEC”,第2127行)。有
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)是唯一的;您不需要任何其他列来生成主键,因此您的
车辆
表可以:
创建表格车辆(
VIN VARCHAR2(17)
约束车辆vin pk主键,
VARCHAR2品牌(20)
约束车辆品牌不为空,
VARCHAR2型(20)
约束车辆模型不为空,
颜色VARCHAR2(10)
约束车辆颜色不为空
);
类似地,您可能只需要一列作为供应商
中的主键(并且应该将日期值存储为日期
数据类型):
创建表供应商(
s_name VARCHAR2(20)
约束供应商名称主键,
s_id VARCHAR2(15)
约束供应商的id不为空,
零件id VARCHAR2(20)
约束供应商\u零件\u id\u nn不为空,
供应日期
约束供应商\供应\日期\ nn不为空
);
然后您的制造商表可以是:
创建表格制造商(
m_name VARCHAR2(50),
m_id VARCHAR2(15),
s_name VARCHAR2(20)
约束制造商\uu s\u名称\uu fk
在删除集NULL上引用供应商(s_名称),
VIN VARCHAR2(17)
约束制造商\uu vin\uu fk
参考删除集NULL上的车辆(vin),
约束制造商\uuuu m\u名称\uuuu m\u id\uuuu pk主键(m\u名称,m\u id)
);
(同样,您可能希望更改它,以便只有一列是主键。)
然后,您可以插入数据:
插入车辆值(“JM1CW2BL4D0154490”、“马自达”、“马自达5”、“棕色”);
在供应商价值中插入(“MNAO供应商”、“MNAO”、“308”、日期“2013-01-28”);
插入制造商值(“马自达汽车公司”、“MZDAY”、“MNAO供应商”、“JM1CW2BL4D0154490”);
(并且不要将日期作为字符串传递,请使用TO_DATE
或日期文字。)
dbfiddle您有一些不应该存在的额外右括号,如主键(m_name,m_id))
。然后,外键定义在SQL中无效:您需要在父表中提供列名,如:外键(s\u name)引用DELETE SET NULL上的供应商(s\u name)
。但即便如此:外键的格式也不正确:您只能引用父表中的主键(或一组唯一列),这不是您在这里要做的。你可能需要重新考虑你的设计。啊,谢谢。我没听清楚括号。我也修复了外键,并用MT0推荐的“约束”设置了一个新的设计。非常感谢!我计划实现更多查询并使用此方法。今天我确实学到了一些新东西。