Sql 违反-未找到父项错误

Sql 违反-未找到父项错误,sql,oracle,Sql,Oracle,我的数据库中有这两个表,DEPT1和EMP1,它们引用雇主部门和雇主列表,表EMP1包含一个名为refdept的外键。 我的问题是,我可以将数据插入DEPT1,但不能插入EMP1,这是我得到的异常: instanciation de la connexion connexion1 nov. 17, 2014 7:54:12 PM tp.dao.DeptDAO create Infos: create new instance nov. 17, 2014 7:54:13 PM tp.dao.De

我的数据库中有这两个表,DEPT1和EMP1,它们引用雇主部门和雇主列表,表EMP1包含一个名为refdept的外键。 我的问题是,我可以将数据插入DEPT1,但不能插入EMP1,这是我得到的异常:

instanciation de la connexion connexion1
nov. 17, 2014 7:54:12 PM tp.dao.DeptDAO create
Infos:  create new instance
nov. 17, 2014 7:54:13 PM tp.dao.DeptDAO create
Infos: New instance is created.
nov. 17, 2014 7:54:13 PM tp.dao.DeptDAO create
Infos: Return Result == true
nov. 17, 2014 7:54:13 PM tp.dao.EmpDAO create
Infos:  create new instance
nov. 17, 2014 7:54:13 PM tp.dao.EmpDAO create
Grave: ORA-02291: integrity constraint (BASE.FK_DEPT) violated - parent key not found

java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (base.FK_DEPT) violated - parent key not found

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
l'employéEMP5est ajouté à cet département
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
    at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:204)
    at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1007)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1315)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657)
    at oracle.jdbc.driver.OracleCallableStatement.executeUpdate(OracleCallableStatement.java:4739)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
    at tp.dao.EmpDAO.create(EmpDAO.java:48)
    at tp.TP.main(TP2.java:84)
nov. 17, 2014 7:54:13 PM tp.dao.EmpDAO create
Infos: Return Result == false
nov. 17, 2014 7:54:13 PM tp.dao.EmpDAO create
Infos: Return Result == false
我试过这个:

insert into base.EMP1(ide,nome,rue,ville,refdept) values (7,"EMP5","agadir","dddd",(select idd from base.DEPT1 where nomd ='Math'));
我得到这个错误:

Error code 984, SQL state 42000: ORA-00984: column not allowed here
请提供任何帮助,谢谢:

ORA-02291:违反了完整性约束BASE.FK_DEPT-未找到父项

DEPT1中没有这样的值,请先检查

插入base.EMP1ide、nome、rue、ville、refdept值7、EMP5、agadir、dddd,从base.DEPT1中选择idd,其中nomd='Math'

试试这个:

insert into base.EMP1(ide,nome,rue,ville,refdept)
select 7,'EMP5','agadir','dddd', idd from base.DEPT1 where nomd ='Math';
ORA-02291:违反了完整性约束BASE.FK_DEPT-未找到父项

DEPT1中没有这样的值,请先检查

插入base.EMP1ide、nome、rue、ville、refdept值7、EMP5、agadir、dddd,从base.DEPT1中选择idd,其中nomd='Math'

试试这个:

insert into base.EMP1(ide,nome,rue,ville,refdept)
select 7,'EMP5','agadir','dddd', idd from base.DEPT1 where nomd ='Math';
看起来您在DEPT1中没有idd列

尝试:

看起来您在DEPT1中没有idd列

尝试:


我想你应该这样试试:

insert into base.EMP1(ide,nome,rue,ville,refdept) values (7,'EMP5','agadir','dddd',
(select idd from base.DEPT1 where nomd ='Math'));

我想你应该这样试试:

insert into base.EMP1(ide,nome,rue,ville,refdept) values (7,'EMP5','agadir','dddd',
(select idd from base.DEPT1 where nomd ='Math'));

错误是因为您违反了引用完整性,您不能在带有外键的列中插入值,如果父表中不存在此值感谢Aramillo的回复,我如何向refdept添加值然后??将缺少的记录添加到DEPT1表能否解释更多@Aishu并感谢:EMP5是一个列名,不是字符串文字:错误是因为您违反了引用完整性,无法在带有外键的列中插入值,如果父表中不存在此值,谢谢Aramillo的回复,如何向refdept添加值然后向DEPT1表添加缺少的记录@Aishu和谢谢:EMP5是一个列名,而不是字符串文字:谢谢Tim Nano先生,我在代码中尝试了语法,但现在我遇到了另一个错误java.sql.SQLException:Index de colonne non validePay请注意插入的内容,确保这些是正确的值。在SQL Developer中运行查询,您将看到有关错误的详细信息。@Lina请检查,如果ide列是主键,您不能将insert用作select,因为您多次插入值7,这可能是导致错误的原因。我是否应该为每个表创建一个序列,并为插入创建一个触发器?@Lina sequence需要一个唯一的值,如果ide应该是唯一的,那么是的。至于触发器——这取决于代码背后的业务逻辑,我想这取决于您。感谢Tim Nano先生,我在代码中尝试了语法,但现在我遇到了另一个错误java.sql.SQLException:Index de colonne non-valide请注意您插入的内容,确保这些值是正确的。在SQL Developer中运行查询,您将看到有关错误的详细信息。@Lina请检查,如果ide列是主键,您不能将insert用作select,因为您多次插入值7,这可能是导致错误的原因。我是否应该为每个表创建一个序列,并为插入创建一个触发器?@Lina sequence需要一个唯一的值,如果ide应该是唯一的,那么是的。至于触发器,它取决于代码背后的业务逻辑,我认为这取决于您。