SQL:缺少右括号和表或视图不存在错误

时间:2017-12-04 00:04:58

标签: sql oracle

我正在尝试创建5个表格,但前3个下降并创建没有问题,但最后2个乐队粉丝似乎没有太多运气。

DROP TABLE festival cascade constraints;
CREATE TABLE festival (
 Festival_ID    VARCHAR2(4) PRIMARY KEY,
 Festival_Organizer     varchar2(30),
 Festival_Location  varchar2(20));

DROP TABLE venue cascade constraints;
CREATE TABLE venue(
 Venue_ID   VARCHAR2(3) PRIMARY KEY,
 Venue_Name     VARCHAR2(25),
 Venue_Location VARCHAR2(15),
 Venue_Contact_Person VARCHAR2(30),
 Venue_Contact_Number NUMERIC(9,2),
 Venue_Type VARCHAR2(15),
 Venue_Size VARCHAR2(6),
 Venue_HirePrice FLOAT(8));

DROP TABLE staff cascade constraints;
CREATE TABLE staff(
 Staff_ID   VARCHAR2(3) PRIMARY KEY,
 Staff_Firstname    VARCHAR2(20),
 Staff_Surname  VARCHAR2(25),
 Staff_Specialism   VARCHAR2(20),
 Staff_Salary   NUMERIC(8,2),
 Staff_Contact_Number   NUMERIC(9,2),
 Staff_Address  VARCHAR2(50),
 Venue_ID   VARCHAR2(5) REFERENCES venue(Venue_ID));

DROP TABLE band cascade constraints;
CREATE TABLE band(
 Band_ID    VARCHAR2(3) PRIMARY KEY,
 Band_Name  VARCHAR2(25),
 Band_ContactNo NUMERIC(8,2),
 Band_PlayDate  DATE NOT NULL,
 Band_PlayTime  TIME (8) NOT NULL,
 Band_Storage_Location  VARCHAR2(30),
 Band_Agent VARCHAR2(25),
 Band_AE    VARCHAR2 (3),
 Venue_ID   VARCHAR2(5) REFERENCES venue(Venue_ID));

DROP TABLE fan cascade constraints;
CREATE TABLE fan(
 Fan_ID VARCHAR(6) PRIMARY KEY,
 Fan_Firstname  VARCHAR2(15),
 Fan_Surname    VARCHAR2(30),
 Fan_Contact_Number NUMERIC(9,2),
 Fan_Address    VARCHAR2(50),
 Fan_DOB    DATE NOT NULL,
 Band_ID    VARCHAR2(5) REFERENCES band(Band_ID));

当我运行代码时,我收到以下错误:

  

DROP TABLE带级联约束ORA-00942:表或视图不存在

     

CREATE TABLE band(Band_ID VARCHAR2(3)PRIMARY KEY,Band_Nam ORA-00907:缺少右括号

     

DROP TABLE风扇级联约束ORA-00942:表或视图不存在

     

CREATE TABLE粉丝(Fan_ID VARCHAR(6)PRIMARY KEY,Fan_Firstna ORA-00942:表或视图不存在

3 个答案:

答案 0 :(得分:0)

问题是您正在尝试删除数据库中不存在的对象。错误消息似乎表明表band和表fan不存在。

我更熟悉MySql,您可以在IF EXISTS语句中添加DROP TABLE条件,但我相信Oracle不支持这种情况。

最简单的选择是在没有CREATE语句的情况下运行两个DROP语句,以确保创建表,之后您应该能够运行上述脚本。 / p>

更优雅的解决方案可能是使用脚本来检查表是否存在,如果存在,则删除它,否则直接创建它,如:

IF (SELECT * FROM TABLES WHERE name='band' > 0)
  DROP TABLE band

CREATE TABLE band (...)

question

有更完整的答案

答案 1 :(得分:0)

原因是你试图删除一个不存在的表。

注释drop table语句,或者如果你想要一个自动版本 getCodecInfo().getCapabilitiesForType(…).colorFormats ,只处理特定的ORA-Error(ORA-00942)。

而不是

Enclose all the drop statements in an Anonymous block

使用:

DROP TABLE band cascade constraints;
CREATE TABLE band..

答案 2 :(得分:0)

DROP TABLE语句的ORA-00942错误是预期的,因为您确实尝试删除不存在的表。所以你不必担心这些。

尝试创建BAND表时出现ORA-00907错误是由于以下行:

  

" Venue_Contact_Number NUMERIC(9,2),"

numeric不是a valid Oracle data type。你的意思是NUMBER。

然后,因为您没有创建BAND表,所以当您尝试创建FAN表时,会得到ORA-00942。这是因为FAN有一个引用BAND表的外键。

作为初学者,您需要学习如何以冷静的眼光阅读自己的代码,以便发现错误。当您在一个脚本中运行一大堆相关语句时,存在单个错误会级联成一系列错误的风险。发生这种情况时,请提取第一个失败的语句并单独处理它。经常删除该bug将清除所有其他失败,这应该是这里的情况。