Pessoal, sou inexperiente com banco de dados e não estou conseguindo resolver esse problema de integridade. Estou usando o banco de dados Oracle XE e tenho as seguintes tabelas:
CREATE TABLE TB_CARGO_MOTORISTA
(
PK_CARGO_MOTORISTA INTEGER NOT NULL ,
CARGO VARCHAR2 (50 CHAR) NOT NULL ,
REMUNERACAO FLOAT NOT NULL
) ;
ALTER TABLE TB_CARGO_MOTORISTA ADD CONSTRAINT PK_CARGO_MOTORISTA PRIMARY KEY ( PK_CARGO_MOTORISTA ) ;
CREATE TABLE TB_ESTADO_MOTORISTA
(
PK_ESTADO_MOTORISTA INTEGER NOT NULL ,
ESTADO VARCHAR2 (30 CHAR) NOT NULL
) ;
ALTER TABLE TB_ESTADO_MOTORISTA ADD CONSTRAINT PK_ESTADO_MOTORISTA PRIMARY KEY ( PK_ESTADO_MOTORISTA ) ;
CREATE TABLE TB_MOTORISTA
(
PK_MOTORISTA INTEGER NOT NULL ,
NOME VARCHAR2 (50 CHAR) NOT NULL ,
MATRICULA VARCHAR2 (50 CHAR) NOT NULL ,
DATA_ADMISSAO DATE NOT NULL ,
TITULO_ELEITOR VARCHAR2 (50 CHAR) NOT NULL ,
CPF INTEGER NOT NULL ,
IDENTIDADE INTEGER NOT NULL ,
ORGAO_EMISSOR_ID VARCHAR2 (20 CHAR) NOT NULL ,
PIS_PASEP VARCHAR2 (50 CHAR) NOT NULL ,
ESCOLARIDADE VARCHAR2 (50 CHAR) NOT NULL ,
CARTEIRA_TRABALHO VARCHAR2 (50 CHAR) NOT NULL ,
DATA_EMISSAO_CT DATE NOT NULL ,
NATURALIDADE VARCHAR2 (50 CHAR) NOT NULL ,
ESTADO_CIVIL VARCHAR2 (50 CHAR) NOT NULL ,
NOME_PAI VARCHAR2 (80 CHAR) ,
NOME_MAE VARCHAR2 (80 CHAR) NOT NULL ,
NOME_CONJUGE VARCHAR2 (80 CHAR) ,
EMAIL VARCHAR2 (80 CHAR) ,
CARGO_ID INTEGER NOT NULL ,
ESTADO_ID INTEGER NOT NULL
) ;
ALTER TABLE TB_MOTORISTA ADD CONSTRAINT PK_MOTORISTA PRIMARY KEY ( PK_MOTORISTA ) ;
ALTER TABLE TB_MOTORISTA ADD CONSTRAINT CARGO_IDFOREIGN KEY ( PK_MOTORISTA ) REFERENCES TB_CARGO_MOTORISTA ( PK_CARGO_MOTORISTA ) ;
ALTER TABLE TB_MOTORISTA ADD CONSTRAINT ESTADO_ID FOREIGN KEY ( PK_MOTORISTA ) REFERENCES TB_ESTADO_MOTORISTA ( PK_ESTADO_MOTORISTA ) ;
Eu primeiro estou inserindo dados nas tabelas TB_CARGO_MOTORISTA e TB_ESTADO_MOTORISTA. Logo em seguida tento inserir os dados na TB_MOTORISTA com as respectivas chaves referenciando o cargo e o estado.
Assim:
INSERT INTO "SISTRAN_DEV"."TB_CARGO_MOTORISTA" (CARGO, REMUNERACAO) VALUES ('44H', '11223')
INSERT INTO "SISTRAN_DEV"."TB_ESTADO_MOTORISTA" (ESTADO) VALUES ('Inativo')
E em seguida uso os IDs gerados para inserir os dados na tabela TB_MOTORISTA:
INSERT INTO "SISTRAN_DEV"."TB_MOTORISTA" (NOME, MATRICULA, DATA_ADMISSAO, TITULO_ELEITOR, CPF, IDENTIDADE, ORGAO_EMISSOR_ID, PIS_PASEP, ESCOLARIDADE, CARTEIRA_TRABALHO, DATA_EMISSAO_CT, NATURALIDADE, ESTADO_CIVIL, NOME_PAI, NOME_MAE, NOME_CONJUGE, EMAIL, CARGO_ID, ESTADO_ID) VALUES ('asdsa', '12321', TO_DATE('2017-04-26 18:12:47', 'YYYY-MM-DD HH24:MI:SS'), '12321321', '1232131', '12321321', 'asdsa', '12312321', 'asdasda', 'asdsa', TO_DATE('2017-04-26 18:12:58', 'YYYY-MM-DD HH24:MI:SS'), 'asdsa', 'asdsa', 'asdsa', 'asdsa', 'asdsad', 'asdasda', '51', '49')
Só que ao tentar inserir esses dados tenho o seguinte erro:
ORA-02291: integrity constraint (SISTRAN_DEV.FK_CARGO_MOTORISTA) violated - parent key not found
Pelo que eu pesquisei, isso acontece porque os dados inseridos da FK não correspondem aos dados na tabela referenciada.
Mas isso não deveria acontecer se eu acabei de inserir esses dados nas tabelas CARGO, certo? Inclusive já tentei inserir fazendo um select e recuperando o id existente na tabela CARGO, mas continuo com o mesmo erro.
Eu vi que é um problema bem simples, mas sinceramente não consegui entender o que está errado. Tenho pouca experiência com banco de dados, então qualquer ajuda já seria de grande valia.