Oracle如果要插入外键的值为-1,则插入null
Oracle if value to be inserted in foreign key is -1, insert null instead
我有一个正在读取的 xml 脚本,用于用数据填充我的数据库。 xml 文件中的一个节点没有 idDirector 字段(节点是电影),因此 xml 将 -1 读取为 idDirector,然后我的存储过程尝试将 -1 插入到fk 字段,这使我的数据库返回一个约束错误:director -1 在 Director table 中不存在。我怎样才能让它插入 null 并使我的 fk 字段可为空?
CREATE TABLE Film (
PRIMARY KEY (idFilm),
FOREIGN KEY (idDirector) REFERENCES Director
);
谢谢
在我看来 CASE
,例如
insert into film (id_film, id_director)
select id_film,
case when id_director = -1 then null
else id_director
end
from ...
有用吗?是:
SQL> create table director (id number primary key);
Table created.
SQL> create table film (id number primary key, id_director number references director);
Table created.
SQL> insert into director values (100);
1 row created.
插入 -1 失败:
SQL> insert into film (id, id_director) values (1, -1);
insert into film (id, id_director) values (1, -1)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SYS_C0065885) violated - parent key not
found
插入 NULL 有效:
SQL> insert into film (id, id_director) values (1, null);
1 row created.
SQL>
我有一个正在读取的 xml 脚本,用于用数据填充我的数据库。 xml 文件中的一个节点没有 idDirector 字段(节点是电影),因此 xml 将 -1 读取为 idDirector,然后我的存储过程尝试将 -1 插入到fk 字段,这使我的数据库返回一个约束错误:director -1 在 Director table 中不存在。我怎样才能让它插入 null 并使我的 fk 字段可为空?
CREATE TABLE Film (
PRIMARY KEY (idFilm),
FOREIGN KEY (idDirector) REFERENCES Director
);
谢谢
在我看来 CASE
,例如
insert into film (id_film, id_director)
select id_film,
case when id_director = -1 then null
else id_director
end
from ...
有用吗?是:
SQL> create table director (id number primary key);
Table created.
SQL> create table film (id number primary key, id_director number references director);
Table created.
SQL> insert into director values (100);
1 row created.
插入 -1 失败:
SQL> insert into film (id, id_director) values (1, -1);
insert into film (id, id_director) values (1, -1)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SYS_C0065885) violated - parent key not
found
插入 NULL 有效:
SQL> insert into film (id, id_director) values (1, null);
1 row created.
SQL>