收到错误“ ORA-00942:表或视图不存在”

时间:2019-05-12 10:59:41

标签: sql oracle oracle-apex

我正在使用Oracle APEX平台,当我运行脚本代码时,一次又一次遇到相同的错误

  

ORA-00942:表或视图不存在

请帮助我找出错误的原因。

create table roles
(
    "role_id" number(5,0) not null,
    "name" varchar2(20) not null,
    constraint "rle_pk" primary key ("role_id")
);

create table users
(
    "user_id" number(5,0) not null,
    "first_name" varchar2(15) not null,
    "last_name" varchar2(15) not null,
    "contact_number" number(15,0) not null,
    "address" varchar2(30) not null,
    "RLE_id" number(5,0) not null,
    constraint "usr_pk" primary key ("user_id")
);

alter table "users" 
      add constraint "usr_rle_fk" 
          foreign key ("RLE_id") references "roles"("role_id");

2 个答案:

答案 0 :(得分:4)

在编写CREATE TABLE ...语句时,如果不对表的名称使用“双引号”,则表名将使用所有大写字母存储。

使用“双引号”时,您将强制区分大小写。这就是为什么ALTER TABLE语句失败(用户<>用户,角色<> ROLES)的原因。您将必须编写:

alter table "USERS"  
add constraint "usr_rle_fk" foreign key ("RLE_id")
references "ROLES"("role_id");

更好:编写DDL代码时避免双引号,例如

SQL> create table roles
  2  (
  3   role_id number(5,0) not null,
  4      name varchar2(20) not null,
  5      constraint rle_pk primary key (role_id)
  6  );

Table ROLES created.  -- notice: table name all upper case

SQL> 
SQL> create table users
  2  (
  3      user_id number(5,0) not null,
  4      first_name varchar2(15) not null,
  5      last_name varchar2(15) not null,
  6      contact_number number(15,0) not null,
  7      address varchar2(30) not null,
  8      RLE_id number(5,0) not null,
  9      constraint usr_pk primary key (user_id)
 10  );

Table USERS created. -- notice: table name all upper case

SQL> 
SQL> alter table users add constraint usr_rle_fk foreign key (RLE_id)
  2  references roles(role_id);

Table USERS altered.

在使用APEX(版本19,使用SQL Workshop / SQL Commands)时,您在创建表时只会看到消息“表已创建”,而不是表名。

enter image description here

答案 1 :(得分:1)

考虑您的CREATE TABLE语句...

create table users

...以及您的ALTER TABLE语句:

alter table "users" 

您在第二条语句中使用双引号是ORA-00942的原因。双引号使标识符区分大小写。因此,USERS不等于"users"。因此,请删除这些双引号,问题将消失。