我正在使用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");
答案 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)时,您在创建表时只会看到消息“表已创建”,而不是表名。
答案 1 :(得分:1)
考虑您的CREATE TABLE语句...
create table users
...以及您的ALTER TABLE语句:
alter table "users"
您在第二条语句中使用双引号是ORA-00942的原因。双引号使标识符区分大小写。因此,USERS
不等于"users"
。因此,请删除这些双引号,问题将消失。