oracle 使用update命令在表的外键列中添加数据

eyh26e7m  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(216)

我 有 两 个 表 professor 和 department 。 professor 表 以 dept _ id 作为 外键 , department 表 以 prof _ id 作为 forgin 键 。 我 是 如何 在 不 添加 dept _ id 列 的 情况 下 创建 professor 表 , 然后 创建 以 prof _ id 作为 外键 的 department 表 的 。 现在 , 我 在 这 两 个 表 中 添加 了 数据( professor 表 没有 列 dept _ id ) 。 现在 我 修改 了 professor 表 并 添加 了 dept _ id 作为 外键 , 现在 我 想 在 此 列 中 添加 数据 , 我 应该 使用 什么 sql 查询 ?

create table PROFESSOR( Prof_id varchar2(5) primary key check(length(Prof_id)=5),
                        Prof_name varchar2(40), 
                        Email varchar2(40) check(Email like '%@%') unique,
                        Mobile varchar2(40) check(length(Mobile)=10) unique,    
                        Speciality varchar2(40));

create table DEPARTMENT(Dept_id varchar2(40) primary key,
            Dname varchar2(40),
            Prof_id varchar2(5) check(length(Prof_id)=5) references PROFESSOR(Prof_id) on delete cascade);

insert into PROFESSOR values('prof1','prof.raj','raj@gmail.com','9992214587','blockchain'); 
insert into PROFESSOR values('prof2','prof.ravi','ravi@gmail.com','9292514787','database'); 

insert into DEPARTMENT values('11','mca','prof1');
insert into DEPARTMENT values('12','btech','prof2');

alter table PROFESSOR add Dept_id varchar2(40) references PROFESSOR(Prof_id)on delete cascade;

中 的 每 一 个
现在 , 我 想 将 数据 添加 到 表 professor 的 列 Dept _ id 中

update PROFESSOR set Dept_id='11' where Prof_id='prof1';

格式
命令 , 但 它 正在 显示
ORA - 02291 : 违反 了 完整 性 约束 条件 ( SQL_TRUVEWTCOSJUGCBEMBVYVITBK . SYS_C00101381949 ) - 未 找到 父 关键 字 ORA - 06512 :在 " SYS . DBMS _ SQL " 的 第 1721 行

31moq8wy

31moq8wy1#

当然它失败了;您引用了错误的表(professor,而不是department)。
这就是你所做的:

SQL> alter table PROFESSOR add Dept_id varchar2(40) references PROFESSOR(Prof_id)on delete cascade;

Table altered.

SQL> update PROFESSOR set Dept_id='11' where Prof_id='prof1';
update PROFESSOR set Dept_id='11' where Prof_id='prof1'
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SYS_C009258) violated - parent key not
found

因此,删除该 invalid 约束并创建一个新约束:

SQL> alter table professor drop constraint sys_c009258;

Table altered.

SQL> alter table PROFESSOR add CONSTRAINT FK_PROF_DEPT FOREIGN KEY (DEPT_ID)
  2  references DEPARTMENT(DEPT_ID)on delete cascade;

Table altered.

SQL> update PROFESSOR set Dept_id='11' where Prof_id='prof1';

1 row updated.

SQL>

现在update可以工作了。

lbsnaicq

lbsnaicq2#

您的ALTER TABLE DDL有错误。请用途:

alter table PROFESSOR 
add Dept_id varchar2(40) 
references DEPARTMENT(dept_id) on delete cascade;

请参阅db<>fiddle处的示例。

相关问题