【问题标题】:Oracle Apex SQL Error Ora-00942: table or view does not existOracle Apex SQL 错误 Ora-00942:表或视图不存在
【发布时间】:2020-10-07 07:11:45
【问题描述】:

如果标签有误,我深表歉意,我尝试阅读要求并且几乎不理解,因为我在该领域的背景为零,但尽我所能选择合适的标签。基本上,我是 SQL 语言的新手,我已经尝试了至少 5 个小时来解决我在 oracle apex 中的所有错误,但有一个问题真的无法解决,我不明白错误代码。看起来是一个简单的错误,更成熟的程序员会很快识别出来,因此这里是代码。

简介:这是一个关于我国接触者追踪系统的数据模型,它并不多,因为这是我与任何编程相关的第一个主题。下面的代码是一个包含12个表的完整文件,只需要知道导致它无法运行的错误是什么。 picture1 feedback after run(line 1-15) picture2 feedback after run (line 16-24)

DROP TABLE INDIVIDUAL;
DROP TABLE DAILYMONITORING;
DROP TABLE CATEGORY;
DROP TABLE DEPENDANT;
DROP TABLE VISITRECORD;
DROP TABLE LOCATION;
DROP TABLE TRAVELRECORD;
DROP TABLE COUNTRY;
DROP TABLE FAMILYMEMBER;
DROP TABLE FAMILYRECORD;
DROP TABLE OFFICER;
DROP TABLE HEALTHOFFICE;

--Student A--
CREATE TABLE FAMILYMEMBER (
    famMobileNo CHAR(12) PRIMARY KEY,
    familyName CHAR(100) NOT NULL
);

--Student A (Intersection Entity)--
CREATE TABLE FAMILYRECORD (
    famMobileNo CHAR(12),
    mysjID CHAR(20),
    constraint familyrecord_PK PRIMARY KEY (famMobileNo, mysjID),
    constraint familyrecord_familymember_FK FOREIGN KEY (famMobileNo) REFERENCES Familymember (famMobileNo),
    constraint familyrecord_familymember_FK FOREIGN KEY (mysjID) REFERENCES Individual(mysjID)
);

--Student A--
CREATE TABLE OFFICER (
    officerID CHAR(7) PRIMARY KEY,
    officerName CHAR(100) NOT NULL,
    healthOfficeID CHAR(7) NOT NULL,
    constraint officer_healthoffice_FK FOREIGN KEY (healthOfficeID) REFERENCES Healthoffice (healthOfficeID)
);

--Student A--
CREATE TABLE HEALTHOFFICE (
    healthOfficeID CHAR(7) PRIMARY KEY,
    healthOfficeAddress CHAR(100) NOT NULL,
    telephoneNo CHAR(12) NOT NULL
);



--Student A (Intersection Entity)--
CREATE TABLE TRAVELRECORD(
    countryID CHAR(6),
    mysjID CHAR(20),
    duration INTEGER CHECK(duration>0),
    constraint travelrecord_PK PRIMARY KEY (countryID,mysjID),
    constraint travelrecord_country_FK FOREIGN KEY(countryID) REFERENCES Country(countryID),
    constraint travelrecord_individual_FK FOREIGN KEY(mysjID) REFERENCES Individual(mysjID)  
);

--Student A--
CREATE TABLE COUNTRY(
    countryID CHAR(6) PRIMARY KEY,
    countryName CHAR(50) NOT NULL
);




--Student B--
CREATE TABLE INDIVIDUAL(
    mysjID CHAR(20) PRIMARY KEY,
    passportIC CHAR(20) NOT NULL,
    name VARCHAR(35) NOT NULL,
    ethnicity VARCHAR(20),
    birthDate Date NOT NULL,
    mobileNo CHAR(12),
    housingAddress CHAR(100),
    dateTimeArrival Date,
    wristbandID CHAR(7),
    yearsOfLiving INTEGER,
    IDV_type CHAR(20) NOT NULL CHECK(IDV_type IN ('TRAVELLER','NONTRAVELLER')),
    officerID CHAR(7),
    categoryNo INTEGER NOT NULL,
    constraint individual_officer_FK FOREIGN KEY(officerID) REFERENCES Officer(officerID),
    constraint individual_category_FK FOREIGN KEY(categoryNo) REFERENCES Category(categoryNo)
);


--Student B--
CREATE TABLE DAILYMONITORING(
    dailyMonitoringID CHAR(5) PRIMARY KEY,
    dateOfMonitoring Date NOT NULL,
    patientSymptoms VARCHAR(25) NOT NULL,
    dayOfMonitoring INTEGER NOT NULL,
    mysjID CHAR(20) NOT NULL,
    constraint dailymonitoring_individual_FK FOREIGN KEY(mysjID) REFERENCES Individual(mysjID)
);


--Student B--
CREATE TABLE CATEGORY(
    categoryNo INTEGER PRIMARY KEY,
    dateOfArrivalInMalaysia Date,
    FlightNoOrPublicTransportNo CHAR(8),
    dateOfSymptomsOnset Date,
    relationshipWithCase VARCHAR(20),
    dateOfExposure Date,
    CTY_type CHAR(3) NOT NULL CHECK(CTY_type IN ('PUI','CCI'))
);

    
--Student B--
CREATE TABLE VISITRECORD(
    QRcode CHAR(20),
    mysjID CHAR(20),
    dateTimeScanQR Date NOT NULL,
    constraint visitrecord_PK PRIMARY KEY(QRcode,mysjID),
    constraint visitrecord_location_FK FOREIGN KEY(QRcode) REFERENCES Location(QRcode),
    constraint visitrecord_individual_FK FOREIGN KEY(mysjID) REFERENCES Individual(mysjID)
);


--Student B--
CREATE TABLE LOCATION(
    QRcode CHAR(20) PRIMARY KEY,
    locationAddress VARCHAR(100) NOT NULL,
    description VARCHAR(30)
);


--Student B--
CREATE TABLE DEPENDANT(
    passportICdependant CHAR(20) PRIMARY KEY,
    dependantName CHAR(100) NOT NULL,
    dependantType CHAR(10) NOT NULL  CHECK (dependantType IN ('Child','OKU')),
    mysjID CHAR(20),
    constraint dependant_individual_FK FOREIGN KEY(mysjID) REFERENCES Individual(mysjID)    
);

【问题讨论】:

    标签: sql oracle oracle-apex


    【解决方案1】:

    您的FAMILYRECORD 表定义引用了一个名为Individual 的表,该表不存在。

    顺便说一下,Oracle 使用VARCHAR2(可变长度字符)作为字符串。 CHAR 是为可移植性而提供的固定长度字符串类型,通常不是一般字符值的好选择。

    【讨论】:

    • 好的,注意数据类型,非常感谢
    【解决方案2】:

    “表或视图不存在”非常清楚。执行一个引用不存在的表的命令。

    对于“DROP TABLE”语句,很明显:您要删除的表不存在。

    对于其他语句,这是因为您尝试在尚不存在的表上创建约束。对于FAMILYRECORD 表,有一个引用INDIVIDUAL 的约束,但该表只是稍后在脚本中创建的。因此引发了 ORA-942。

    --Student A (Intersection Entity)--
    CREATE TABLE FAMILYRECORD (
        famMobileNo CHAR(12),
        mysjID CHAR(20),
        constraint familyrecord_PK PRIMARY KEY (famMobileNo, mysjID),
        constraint familyrecord_familymember_FK FOREIGN KEY (famMobileNo) REFERENCES Familymember (famMobileNo),
        constraint familyrecord_familymember_FK FOREIGN KEY (mysjID) REFERENCES Individual(mysjID)
    );
    

    最简单的解决方案是从CREATE TABLE 语句中删除外键约束定义,并使用ALTER TABLE ADD CONSTRAINT 语句在脚本末尾创建所有约束。

    如果您手动运行脚本,它将对您有很大帮助,在 sql 研讨会中一次一条语句。这将允许您诊断已运行语句的错误。如果您在运行脚本后进行诊断,那将不堪重负。

    由于您是 Oracle 和 Apex 的新手,这里有几个提示:

    • 不要使用数据类型 CHAR。而是使用 VARCHAR2
    • 以大写形式定义标识符(表名、列名等)。以后会省去很多麻烦。
    • 使用单独的主键列,类型号为GENERATED ALWAYS AS IDENTITY。这比组合主键更容易使用。如果您想对列强制执行唯一性,请使用唯一索引来强制执行此操作。

    【讨论】:

    • '如果您手动运行脚本,在 sql 工作坊中一次运行一条语句,将会对您有很大帮助。这将允许您诊断已运行语句的错误。 > 我不知道这个,我肯定会改用这种方法。
    • 非常感谢您提供的其他提示,我现在意识到需要进行改进,这对我的 SQL 之旅非常有用
    • 好的,现在我知道这是一个排列问题,以前不知道这个。 Tyvm
    【解决方案3】:

    这与您必须创建表格的顺序有关。由于涉及外键约束:

    • 首先创建master
    • 然后创建孩子

    否则,Oracle 会抱怨您正在引用尚未创建的表。这意味着几乎整个CREATE TABLE 列表都必须重新排列:

    SQL> --Student A--
    SQL> CREATE TABLE FAMILYMEMBER (
      2      famMobileNo CHAR(12) PRIMARY KEY,
      3      familyName CHAR(100) NOT NULL
      4  );
    
    Table created.
    
    SQL>
    SQL> --Student A--
    SQL> CREATE TABLE HEALTHOFFICE (
      2      healthOfficeID CHAR(7) PRIMARY KEY,
      3      healthOfficeAddress CHAR(100) NOT NULL,
      4      telephoneNo CHAR(12) NOT NULL
      5  );
    
    Table created.
    
    SQL>
    SQL> --Student A--
    SQL> CREATE TABLE OFFICER (
      2      officerID CHAR(7) PRIMARY KEY,
      3      officerName CHAR(100) NOT NULL,
      4      healthOfficeID CHAR(7) NOT NULL,
      5      constraint officer_healthoffice_FK FOREIGN KEY (healthOfficeID) REFERENCES Healthoffice (healthOfficeID)
      6  );
    
    Table created.
    
    SQL>
    SQL> --Student B--
    SQL> CREATE TABLE CATEGORY(
      2      categoryNo INTEGER PRIMARY KEY,
      3      dateOfArrivalInMalaysia Date,
      4      FlightNoOrPublicTransportNo CHAR(8),
      5      dateOfSymptomsOnset Date,
      6      relationshipWithCase VARCHAR(20),
      7      dateOfExposure Date,
      8      CTY_type CHAR(3) NOT NULL CHECK(CTY_type IN ('PUI','CCI'))
      9  );
    
    Table created.
    
    SQL>
    SQL> --Student B--
    SQL> CREATE TABLE INDIVIDUAL(
      2      mysjID CHAR(20) PRIMARY KEY,
      3      passportIC CHAR(20) NOT NULL,
      4      name VARCHAR(35) NOT NULL,
      5      ethnicity VARCHAR(20),
      6      birthDate Date NOT NULL,
      7      mobileNo CHAR(12),
      8      housingAddress CHAR(100),
      9      dateTimeArrival Date,
     10      wristbandID CHAR(7),
     11      yearsOfLiving INTEGER,
     12      IDV_type CHAR(20) NOT NULL CHECK(IDV_type IN ('TRAVELLER','NONTRAVELLER')),
     13      officerID CHAR(7),
     14      categoryNo INTEGER NOT NULL,
     15      constraint individual_officer_FK FOREIGN KEY(officerID) REFERENCES Officer(officerID),
     16      constraint individual_category_FK FOREIGN KEY(categoryNo) REFERENCES Category(categoryNo)
     17  );
    
    Table created.
    
    SQL>
    SQL> --Student A (Intersection Entity)-- --> rename FK
    SQL> CREATE TABLE FAMILYRECORD (
      2      famMobileNo CHAR(12),
      3      mysjID CHAR(20),
      4      constraint familyrecord_PK PRIMARY KEY (famMobileNo, mysjID),
      5      constraint familyrecord_familymember_FK FOREIGN KEY (famMobileNo) REFERENCES Familymember (famMobileNo),
      6      constraint familyrecord_individual_FK FOREIGN KEY (mysjID) REFERENCES Individual(mysjID)
      7  );
    
    Table created.
    
    SQL>
    SQL> --Student A--
    SQL> CREATE TABLE COUNTRY(
      2      countryID CHAR(6) PRIMARY KEY,
      3      countryName CHAR(50) NOT NULL
      4  );
    
    Table created.
    
    SQL>
    SQL> --Student A (Intersection Entity)--
    SQL> CREATE TABLE TRAVELRECORD(
      2      countryID CHAR(6),
      3      mysjID CHAR(20),
      4      duration INTEGER CHECK(duration>0),
      5      constraint travelrecord_PK PRIMARY KEY (countryID,mysjID),
      6      constraint travelrecord_country_FK FOREIGN KEY(countryID) REFERENCES Country(countryID),
      7      constraint travelrecord_individual_FK FOREIGN KEY(mysjID) REFERENCES Individual(mysjID)
      8  );
    
    Table created.
    
    SQL>
    SQL> --Student B--
    SQL> CREATE TABLE DAILYMONITORING(
      2      dailyMonitoringID CHAR(5) PRIMARY KEY,
      3      dateOfMonitoring Date NOT NULL,
      4      patientSymptoms VARCHAR(25) NOT NULL,
      5      dayOfMonitoring INTEGER NOT NULL,
      6      mysjID CHAR(20) NOT NULL,
      7      constraint dailymonitoring_individual_FK FOREIGN KEY(mysjID) REFERENCES Individual(mysjID)
      8  );
    
    Table created.
    
    SQL>
    SQL> --Student B--
    SQL> CREATE TABLE LOCATION(
      2      QRcode CHAR(20) PRIMARY KEY,
      3      locationAddress VARCHAR(100) NOT NULL,
      4      description VARCHAR(30)
      5  );
    
    Table created.
    
    SQL>
    SQL> --Student B--
    SQL> CREATE TABLE VISITRECORD(
      2      QRcode CHAR(20),
      3      mysjID CHAR(20),
      4      dateTimeScanQR Date NOT NULL,
      5      constraint visitrecord_PK PRIMARY KEY(QRcode,mysjID),
      6      constraint visitrecord_location_FK FOREIGN KEY(QRcode) REFERENCES Location(QRcode),
      7      constraint visitrecord_individual_FK FOREIGN KEY(mysjID) REFERENCES Individual(mysjID)
      8  );
    
    Table created.
    
    SQL>
    SQL> --Student B--
    SQL> CREATE TABLE DEPENDANT(
      2      passportICdependant CHAR(20) PRIMARY KEY,
      3      dependantName CHAR(100) NOT NULL,
      4      dependantType CHAR(10) NOT NULL  CHECK (dependantType IN ('Child','OKU')),
      5      mysjID CHAR(20),
      6      constraint dependant_individual_FK FOREIGN KEY(mysjID) REFERENCES Individual(mysjID)
      7  );
    
    Table created.
    
    SQL>
    

    或者,您可以按您想要的任何顺序创建表,但没有外键。然后使用ALTER TABLE 语句创建外键。这取决于你。

    此外,必须重命名其中一个外键;不能有两个同名 (familyrecord_familymember_FK)。

    CHAR(100) 几乎肯定是错误的;对于这些表中的大多数 string 列,可能应该是 VARCHAR2 数据类型。

    【讨论】:

    • 好的,非常感谢您的帮助,由于安排的原因,我终于明白了错误,感谢您的补充提示。这对像我这样的初学者来说意义重大
    • 不客气。我希望您会喜欢 Oracle 和 Apex!
    猜你喜欢
    • 2013-04-14
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多