当前位置: 首页 > 知识库问答 >
问题:

ORA-02291:违反完整性约束()-未找到父项

上官和惬
2023-03-14

我试图为adminuser创建会话,这两个表都与相同的外键关联到登录表-但是当我为admin创建种子时,我得到了错误PL/SQL: ORA-02291:完整性约束(login_fk_user)违反-父密钥未找到,在我的另一个问题在这个链接中,我没有以最好的方式解释,但得到了一些关于使用(党-角色-关系模型)和这段代码下面他更多的想法有关已解决的问题链接

创建表admin和主键

/* table admin*/
create table admin (id_admin number(10) not null, 
                    admin_name varchar(30) not null);
/* primary key */
alter table admin add constraint admin_pk primary key (id_admin);

创建表用户和主键

/* table user*/
create table users (id_user number(10) not null, 
                    user_name varchar(30) not null);
/* primary key */
alter table users add constraint user_pk primary key (id_user);

创建表login以及主键和外键

/* table login*/
create table login(id_login number(10) not null, 
                   id_admin_user_login number(10) not null, 
                   email_login varchar(20) not null, 
                   password_login varchar(10) not null);
/* primary key */
alter table login add constraint login_pk primary key (id_login);

/* foreign key reference to admin*/
alter table login add constraint login_fk_admin foreign key (id_admin_user_login) 
reference admin(id_admin);

 /* foreign key reference to user*/
alter table login add constraint login_fk_user foreign key (id_admin_user_login) 
reference users(id_user);

使用表admin/login为管理员创建会话的过程:

PROCEDURE create_admin_session( p_name   IN VARCHAR2,
                                p_email  IN VARCHAR2,
                                p_pass   IN VARCHAR2,
                                p_error  OUT NUMBER,
                                p_msg_error OUT VARCHAR2)
IS
BEGIN
p_error := 0;
INSERT ALL
INTO admin (id_admin, admin_name) VALUES(seq_admin.NEXTVAL, p_name)

INTO login(id_login, id_admin_user_login, email_login, pass_login)
VALUES(seq_login.NEXTVAL, seq_admin.CURRVAL, p_email, p_pass)

SELECT * FROM DUAL;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
p_error     := 1;
p_msg_error := 'Error!'||SQLERRM;
END create_admin_session;

使用表用户/登录为用户创建会话的过程:

PROCEDURE create_user_session( p_name   IN VARCHAR2,
                               p_email  IN VARCHAR2,
                               p_pass   IN VARCHAR2,
                               p_error  OUT NUMBER,
                               p_msg_error OUT VARCHAR2)
IS
BEGIN
p_error := 0;
INSERT ALL
INTO users (id_user, user_name) VALUES(seq_user.NEXTVAL, p_name)

INTO login(id_login, id_admin_user_login, email_login, pass_login)
VALUES(seq_login.NEXTVAL, seq_user.CURRVAL, p_email, p_pass)

SELECT * FROM DUAL;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
p_error     := 1;
p_msg_error := 'Error!'||SQLERRM;
END create_user_session;

创建管理会话时,我收到一个错误ORA-02291:违反了完整性约束(login\u fk\u user)-未找到父密钥

我做错了什么?

共有1个答案

伍心水
2023-03-14

在表login中,我添加了两个id not null一个用于userid\u user\u登录号(10)null,另一个用于adminid\u admin\u登录号(10)null

/* table login*/
create table login(id_login number(10) not null, 
                   id_admin_login number(10) null, 
                   id_user_login number(10) null, 
                   email_login varchar(20) not null, 
                   password_login varchar(10) not null);
/* primary key */
alter table login add constraint login_pk primary key (id_login);

/* foreign key reference to admin*/
alter table login add constraint login_fk_admin foreign key (id_admin_login) 
reference admin(id_admin) ON DELETE CASCADE;

 /* foreign key reference to user*/
alter table login add constraint login_fk_user foreign key (id_user_login) 
reference users(id_user) ON DELETE CASCADE;

使用表admin/login为管理员创建会话的过程:

PROCEDURE create_admin_session( p_name   IN VARCHAR2,
                                p_email  IN VARCHAR2,
                                p_pass   IN VARCHAR2,
                                p_error  OUT NUMBER,
                                p_msg_error OUT VARCHAR2)
IS
BEGIN
p_error := 0;
INSERT ALL
INTO admin (id_admin, admin_name) VALUES(seq_admin.NEXTVAL, p_name)

INTO login(id_login, id_admin_login, id_user_login, email_login, pass_login)
VALUES(seq_login.NEXTVAL, seq_admin.CURRVAL, NULL, p_email, p_pass)

SELECT * FROM DUAL;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
p_error     := 1;
p_msg_error := 'Error!'||SQLERRM;
END create_admin_session;

使用表用户/登录为用户创建会话的过程:

PROCEDURE create_user_session( p_name   IN VARCHAR2,
                               p_email  IN VARCHAR2,
                               p_pass   IN VARCHAR2,
                               p_error  OUT NUMBER,
                               p_msg_error OUT VARCHAR2)
IS
BEGIN
p_error := 0;
INSERT ALL
INTO users (id_user, user_name) VALUES(seq_user.NEXTVAL, p_name)

INTO login(id_login, id_admin_login, id_user_login, email_login, pass_login)
VALUES(seq_login.NEXTVAL, NULL, seq_user.CURRVAL, p_email, p_pass)

SELECT * FROM DUAL;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
p_error     := 1;
p_msg_error := 'Error!'||SQLERRM;
END create_user_session;

有了这个解决方案,一切都能完美地工作,如果我需要删除用户/登录名,我就可以随心所欲地工作了

 类似资料:
  • 我遇到了一些SQL外键的问题。 下面是我的表和插入SQL。 SQL ORA-02291:违反完整性约束-未找到父键 我不知道为什么我的外键是错的?

  • 所以这里是我的数据库: 插入表格: 批次表不断出现的错误是:ORA-02290:违反了检查约束(EJAY.batches\u DATE\u CHK) 学生表出现的错误是:ORA-02291:违反完整性约束-未找到父键 我感到困惑的是,它只显示在表格中的一些行。教职员工和课程都很好,只有这两个。如果答案很明显,我道歉,我是初学者。请帮帮忙

  • 问题内容: 嗨,我正在Oracle SQL开发人员中开发数据库,​​试图从另一个表访问foriegn键。我目前正在使用以下CREATE语句创建的ItemOrdered表 如您所见,我具有以下前键Ords和BeltID。 现在,当我尝试运行以下语句时 它给了我以下错误 违反-找不到父密钥02291。00000-“违反完整性约束(%s。%s)-找不到父密钥” 如果需要,我已经提供了Ords CREAT

  • 我试图在过程中插入一个动态值,每次运行它时,都会出现此错误。 “详细信息”:“违反ORA-02291:完整性约束(VIEW.AA_DEFAULT_APP_LIST_FK_AA_APP)-未找到父密钥 这是我的程序。 我在SQLDeveloper中尝试了这个代码,它对我来说很好... 请帮忙。

  • 我最近正在了解这一点,我想知道我是否可以帮助自己,这里是我的数据库: 插入值

  • 当我做插入它给我这个错误: ORA-02291:违反完整性约束(H00300581.FK_类)-未找到父密钥 对于注册表中的所有插入,都会发生此错误。我需要帮忙,请帮我修一下。 是否来自表中的外键?可能是因为我什么都试过了,但都没用。 创建表 创建序列 培训师数据 类数据 成员数据 注册资料