【问题标题】:Why doesn't this Oracle 10g XE script generate tables with foreign keys?为什么这个 Oracle 10g XE 脚本不生成带有外键的表?
【发布时间】:2012-05-02 20:10:28
【问题描述】:

我正在尝试运行一个脚本,该脚本只是一系列删除表和创建表。它可以编译,但运行时出现以下错误:ORA-00942 表或视图不存在。它们不应该存在我正在尝试创建它们!任何人都知道为什么会发生这种情况?我使用的是 Oracle 界面,而不是命令行。我已经在 Notepad++ 中创建了代码并将其上传到 Oracle。然后我在 Oracle 中保存并运行该脚本。当我单击查看结果时,会出现错误。

编辑:我现在注意到只有没有创建外键的表!

这是我的代码的摘录:

CREATE TABLE PricePlans (
plan_id NUMBER(3) NOT NULL,
plan_name VARCHAR2(15) NOT NULL,
plan_desc VARCHAR2(30) NOT NULL,
plan_duration_months NUMBER(2) NOT NULL,
plan_cost NUMBER(4) NOT NULL,
CONSTRAINT pk_planid PRIMARY KEY (plan_id)
);

DROP TABLE Classes;
CREATE TABLE Classes (
class_id NUMBER(3) NOT NULL,
class_name VARCHAR2(30) NOT NULL,
class_desc VARCHAR2(30) NOT NULL,
class_facility NUMBER(2) NOT NULL,
class_instructor NUMBER(5) NOT NULL,
class_cost NUMBER(2) NOT NULL,
CONSTRAINT pk_classid PRIMARY KEY (class_id),
CONSTRAINT fk_classfacility 
    FOREIGN KEY (class_facility) 
    REFERENCES Facilities(facility_id),
CONSTRAINT fk_classinstructor 
    FOREIGN KEY (class_instructor) 
    REFERENCES Employees(emp_id)
);

DROP TABLE Facilities;
CREATE TABLE Facilities (
facility_id NUMBER(2) NOT NULL,
facility_name VARCHAR(15) NOT NULL,
facility_manager NUMBER(4) NOT NULL,
CONSTRAINT pk_facilityid PRIMARY KEY (facility_id);
CONSTRAINT fk_facilitymanager 
    FOREIGN KEY (facility_manager) 
    REFERENCES Manager(manager_id)
);

【问题讨论】:

    标签: sql oracle10g


    【解决方案1】:

    我相信您查询中的 DROP TABLE 语句正在尝试删除不存在的表。

    从您的脚本中删除以下行。

    DROP TABLE Classes;
    
    DROP TABLE Facilities;
    

    您可以在执行DROP TABLE 语句之前检查表是否存在。以下是一些可能对您有所帮助的 SO 答案。

    Oracle: If Table Exists

    Check if table exists in the database - PL SQL

    更新

    ClassesCREATE TABLE 语句中,外键 fk_classfacility 引用了表 Facilities,它稍后创建。尝试切换 CREATE TABLE 语句。先创建Facilities表,再创建Classes表。

    我假设约束中引用的所有其他表都已经存在。

    【讨论】:

    • 不,这还没有解决。只是运行创建表脚本仍然得到同样的错误
    猜你喜欢
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2011-03-31
    • 2015-02-26
    • 1970-01-01
    相关资源
    最近更新 更多