【问题标题】:table or view does not exist error for unknown reason由于未知原因,表或视图不存在错误
【发布时间】:2017-08-19 10:14:56
【问题描述】:
DROP TABLE BASIC_USER;
DROP TABLE ADMIN_USER;
DROP TABLE EQUIPMENT;
DROP TABLE CAVE;
DROP TABLE DUNGEON;
DROP TABLE ADVENTURE;
DROP TABLE AUTHOR;
DROP TABLE CHARACTER_GROUP;
DROP TABLE MY_CHARACTER;
DROP TABLE MY_USER;

CREATE TABLE MY_USER (
  user_ID int NOT NULL,
  nick varchar(255) NOT NULL,
  date_of_registration date DEFAULT current_date,
  first_name varchar(255) NOT NULL,
  last_name varchar(255),
  email varchar(255) UNIQUE, 
  age int NOT NULL,
  user_location varchar(255),
  finished_adventures int DEFAULT 0 NOT NULL,
  PRIMARY KEY(user_ID)
);

CREATE TABLE MY_CHARACTER (
  character_ID int NOT NULL,
  owner_ID int REFERENCES MY_USER(user_ID),
  char_name varchar(255) NOT NULL,
  race varchar(255) NOT NULL,
  char_class varchar(255) NOT NULL,
  char_rank int NOT NULL,
  hp int NOT NULL,
  status int NOT NULL,
  CHECK (char_rank <= 99 AND char_rank >= 0),
  CHECK (hp <= 100 AND hp >= 0),
  CHECK (status <= 1 AND status >= 0),
  PRIMARY KEY(character_ID)
);

CREATE TABLE EQUIPMENT (
  equipment_ID int NOT NULL,
  owner_ID int REFERENCES MY_CHARACTER(character_ID),
  equipment_name varchar(255) NOT NULL,
  equipment_type varchar(255) NOT NULL,
  attack int NOT NULL,
  defense int NOT NULL,
  PRIMARY KEY(equipment_ID)
);

CREATE TABLE DUNGEON (
  dungeon_ID int NOT NULL,
  dungeon_location varchar(255),
  dungeon_difficulty int NOT NULL,
  goal varchar(2500),
  status int NOT NULL,
  dungeon_creator_ID int REFERENCES AUTHOR(author_ID),
  CHECK (dungeon_difficulty <= 5 AND dungeon_difficulty >= 0),
  PRIMARY KEY(dungeon_ID)
);

CREATE TABLE ADVENTURE (
  adventure_ID int NOT NULL,
  adventure_name varchar(255) NOT NULL,
  adventure_location varchar(255) NOT NULL,
  adventure_difficulty int NOT NULL,
  participant_ID int REFERENCES CHARACTER_GROUP(chargroup_ID),
  adventure_goal varchar(2500),
  creator_ID int REFERENCES AUTHOR(author_ID),
  PRIMARY KEY (adventure_ID)
);

CREATE TABLE CHARACTER_GROUP (
  chargroup_ID int NOT NULL,
  group_participant_ID int NOT NULL REFERENCES MY_CHARACTER(character_ID)
);

CREATE TABLE CAVE (
  game_room_ID int NOT NULL,
  cave_name varchar(255) NOT NULL,
  dm_ID int REFERENCES MY_USER(user_ID),
  dungeon_sub int REFERENCES DUNGEON(dungeon_ID),
  adventure_sub int REFERENCES ADVENTURE(adventure_ID),
  cave_creation_date date DEFAULT current_date NOT NULL,
  playing_group int REFERENCES CHARACTER_GROUP(chargroup_ID),
  PRIMARY KEY(game_room_ID)
);

CREATE TABLE AUTHOR (
  author_ID int NOT NULL,
  email varchar (255) UNIQUE,
  nick varchar (255) UNIQUE
);

CREATE TABLE BASIC_USER(
  basic_ID int PRIMARY KEY REFERENCES MY_USER(user_ID)
);

CREATE TABLE ADMIN_USER(
  admin_ID int PRIMARY KEY REFERENCES MY_USER(user_ID),
  permissions int NOT NULL,
  specialization varchar(255)
);

错误:

表 BASIC_USER 已删除。

表 ADMIN_USER 已删除。

桌子设备掉了。

从第 4 行开始的错误命令 - DROP TABLE CAVE 错误报告 - SQL 错误:ORA-00942:表或视图不存在 00942. 00000 - “表或视图不存在” *原因:
*行动:

从第 5 行开始的错误命令 - DROP TABLE DUNGEON 错误 报告 - SQL 错误:ORA-00942:表或视图不存在 00942. 00000 - “表或视图不存在” *原因:
*行动:

从第 6 行开始的错误命令 - DROP TABLE ADVENTURE 错误 报告 - SQL 错误:ORA-00942:表或视图不存在 00942. 00000 - “表或视图不存在” *原因:
*操作:表 AUTHOR 已删除。

表 CHARACTER_GROUP 已删除。

表 MY_CHARACTER 已删除。

表 MY_USER 已删除。

已创建表 MY_USER。

已创建表 MY_CHARACTER。

表设备已创建。

从第 50 行开始的错误命令 - CREATE TABLE DUNGEON (
dungeon_ID int NOT NULL,dungeon_location varchar(255),
dungeon_difficulty int NOT NULL,目标 varchar(2500),状态 int NOT NULL, dungeon_creator_ID int REFERENCES AUTHOR(author_ID),
检查(dungeon_difficulty = 0),主要 KEY(dungeon_ID) ) 错误报告 - SQL 错误: ORA-00942: table or view 不存在 00942. 00000 - “表或视图不存在” *原因:
*行动:

从第 61 行开始的错误命令 - CREATE TABLE ADVENTURE (
Adventure_ID int NOT NULL,adventure_name varchar(255) NOT NULL,
Adventure_location varchar(255) NOT NULL,adventure_difficulty int NOT NULL,participant_ID int 参考 CHARACTER_GROUP(chargroup_ID), Adventure_goal varchar(2500),
creator_ID int REFERENCES AUTHOR(author_ID), PRIMARY KEY (adventure_ID) ) 错误报告 - SQL 错误:ORA-00942:表或视图 不存在 00942. 00000 - “表或视图不存在” *原因:
*操作:已创建表 CHARACTER_GROUP。

从第 77 行开始的错误命令 - CREATE TABLE CAVE (
game_room_ID int NOT NULL,cave_name varchar(255) NOT NULL,dm_ID int REFERENCES MY_USER(user_ID), dungeon_sub int REFERENCES DUNGEON(dungeon_ID), Adventure_sub int 参考 ADVENTURE(adventure_ID), cave_creation_date 日期 DEFAULT current_date NOT NULL,playing_group int 参考 CHARACTER_GROUP(chargroup_ID), PRIMARY KEY(game_room_ID) ) 错误 报告 - SQL 错误:ORA-00942:表或视图不存在 00942. 00000 - “表或视图不存在” *原因:
*操作:已创建表 AUTHOR。

已创建表 BASIC_USER。

表 ADMIN_USER 已创建。

知道这个“表或视图不存在”错误的原因是什么吗?

【问题讨论】:

  • 请尝试提供一个最小的示例,从您的代码中删除所有其他不需要重现问题的内容。

标签: sql oracle


【解决方案1】:

如果不先定义引用的表,就无法定义外键。因此,您需要做的就是对 DDL 进行重新排序,以便在引用之前定义所有表。 SQL 不直接允许前向引用。

在某些情况下,您可能必须定义循环依赖项。因此,最好先定义所有表,然后再定义应用约束。

正如Jon 所建议的,另一种替代方法是使用CREATE SCHEMA 语句,它允许在单个事务中创建多个表和视图并在您自己的架构中执行多个授权并使用前向引用。

DROP TABLE BASIC_USER;
DROP TABLE ADMIN_USER;
DROP TABLE EQUIPMENT;
DROP TABLE CAVE;
DROP TABLE DUNGEON;
DROP TABLE ADVENTURE;
DROP TABLE AUTHOR;
DROP TABLE CHARACTER_GROUP;
DROP TABLE MY_CHARACTER;
DROP TABLE MY_USER;



CREATE TABLE AUTHOR (
  author_ID int NOT NULL,
  email varchar (255) UNIQUE,
  nick varchar (255) UNIQUE
);

CREATE TABLE MY_USER (
  user_ID int NOT NULL,
  nick varchar(255) NOT NULL,
  date_of_registration date DEFAULT current_date,
  first_name varchar(255) NOT NULL,
  last_name varchar(255),
  email varchar(255) UNIQUE, 
  age int NOT NULL,
  user_location varchar(255),
  finished_adventures int DEFAULT 0 NOT NULL,
  PRIMARY KEY(user_ID)
);



CREATE TABLE BASIC_USER(
  basic_ID int PRIMARY KEY REFERENCES MY_USER(user_ID)
);

CREATE TABLE ADMIN_USER(
  admin_ID int PRIMARY KEY REFERENCES MY_USER(user_ID),
  permissions int NOT NULL,
  specialization varchar(255)
);

CREATE TABLE MY_CHARACTER (
  character_ID int NOT NULL,
  owner_ID int REFERENCES MY_USER(user_ID),
  char_name varchar(255) NOT NULL,
  race varchar(255) NOT NULL,
  char_class varchar(255) NOT NULL,
  char_rank int NOT NULL,
  hp int NOT NULL,
  status int NOT NULL,
  CHECK (char_rank <= 99 AND char_rank >= 0),
  CHECK (hp <= 100 AND hp >= 0),
  CHECK (status <= 1 AND status >= 0),
  PRIMARY KEY(character_ID)
);

CREATE TABLE EQUIPMENT (
  equipment_ID int NOT NULL,
  owner_ID int REFERENCES MY_CHARACTER(character_ID),
  equipment_name varchar(255) NOT NULL,
  equipment_type varchar(255) NOT NULL,
  attack int NOT NULL,
  defense int NOT NULL,
  PRIMARY KEY(equipment_ID)
);

CREATE TABLE DUNGEON (
  dungeon_ID int NOT NULL,
  dungeon_location varchar(255),
  dungeon_difficulty int NOT NULL,
  goal varchar(2500),
  status int NOT NULL,
  dungeon_creator_ID int REFERENCES AUTHOR(author_ID),
  CHECK (dungeon_difficulty <= 5 AND dungeon_difficulty >= 0),
  PRIMARY KEY(dungeon_ID)
);

CREATE TABLE CHARACTER_GROUP (
  chargroup_ID int NOT NULL,
  group_participant_ID int NOT NULL REFERENCES MY_CHARACTER(character_ID)
);

CREATE TABLE ADVENTURE (
  adventure_ID int NOT NULL,
  adventure_name varchar(255) NOT NULL,
  adventure_location varchar(255) NOT NULL,
  adventure_difficulty int NOT NULL,
  participant_ID int REFERENCES CHARACTER_GROUP(chargroup_ID),
  adventure_goal varchar(2500),
  creator_ID int REFERENCES AUTHOR(author_ID),
  PRIMARY KEY (adventure_ID)
);

CREATE TABLE CAVE (
  game_room_ID int NOT NULL,
  cave_name varchar(255) NOT NULL,
  dm_ID int REFERENCES MY_USER(user_ID),
  dungeon_sub int REFERENCES DUNGEON(dungeon_ID),
  adventure_sub int REFERENCES ADVENTURE(adventure_ID),
  cave_creation_date date DEFAULT current_date NOT NULL,
  playing_group int REFERENCES CHARACTER_GROUP(chargroup_ID),
  PRIMARY KEY(game_room_ID)
);

【讨论】:

  • 作为对 DDL 重新排序的替代方法,还可以使用 CREATE SCHEMA 一次定义多个表。
猜你喜欢
  • 1970-01-01
  • 2014-01-02
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多