2014-11-17 4 views
0

У меня есть две таблицы в моей базе данных, DEPT1 и EMP1, которые ссылаются на департамент работодателей и список работодателей, таблица EMP1 содержит внешний ключ с именем refdept. enter image description here моя проблема заключается в том, что я могу вставить данные в 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 

любая помощь pleaze и спасибо :(

+1

ошибка заключается в том, что вы нарушаете ссылочную целостность, вы не можете вставлять значения в столбец с внешним ключом, если эти значения не существуют в родительской таблице – Aramillo

+0

благодарит Aramillo за ваш ответ, как я могу добавить значения в refdept then ?? – Lina

+1

добавить отсутствующие записи в таблицу DEPT1 – Aishu

ответ

2

ORA-02291: integrity constraint (BASE.FK_DEPT) violated - parent key not found

В DEPT1 такого значения нет, сначала проверьте его.

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) 
select 7,'EMP5','agadir','dddd', idd from base.DEPT1 where nomd ='Math'; 
+0

благодарит г-на Тима Наноса Я попробовал синтаксис в своем коде, но теперь у меня есть еще одна ошибка. Java.sql.SQLException: Index de colonne non valide – Lina

+0

Обратите внимание на то, что вы вставляете, убедитесь, что это правильные значения. Запустите запрос в SQL Developer, и вы увидите больше информации об ошибке. –

+1

@Lina Убедитесь, что если столбец 'ide' является первичным ключом, вы не можете использовать' insert as select', потому что вы вставляете значение '7' много раз, это может быть причиной ошибки – Aramillo

1

выглядит, как вы не имеете IDD колонку в dept1

попробовать:

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

Я думаю, вы должны попробовать это так:

insert into base.EMP1(ide,nome,rue,ville,refdept) values (7,'EMP5','agadir','dddd', 
(select idd from base.DEPT1 where nomd ='Math')); 
Смежные вопросы