Pessoal eu tenho a seguinte tabela:
CREATE TABLE editora
(edi_codigo NUMBER (10), edi_nome VARCHAR2(70) NOT NULL
);
CREATE TABLE autor
(
aut_matricula NUMBER (10),
aut_nome VARCHAR2 (50) NOT NULL,
aut_cpf VARCHAR2(12) NOT NULL,
aut_dtnasc DATE NOT NULL,
aut_nascionalidade VARCHAR2(30)
);
CREATE TABLE livro
(
liv_codigo NUMBER(10),
liv_titulo VARCHAR2(70),
liv_preco NUMBER(7,2),
liv_lancamento DATE,
edi_codigo NUMBER(10),
ass_sigla CHAR(3) NOT NULL
);
CREATE TABLE assunto
(ass_sigla CHAR(3), ass_descricao VARCHAR2 (20)
);
ALTER TABLE editora ADD
(
CONSTRAINT editora_edi_codigo_pk PRIMARY KEY(edi_codigo)
)
;
ALTER TABLE livro ADD
(
CONSTRAINT livro_liv_codigo_pk PRIMARY KEY (liv_codigo)
)
;
ALTER TABLE autor ADD
(
CONSTRAINT autor_aut_matricula_pk PRIMARY KEY (aut_matricula)
)
;
ALTER TABLE assunto ADD
(
CONSTRAINT assunto_ass_sigla_pk PRIMARY KEY(ass_sigla)
)
;
ALTER TABLE livro ADD
(
CONSTRAINT livro_edi_codigo_fk FOREIGN KEY(edi_codigo) REFERENCES editora(edi_codigo)
)
;
ALTER TABLE livro ADD
(
CONSTRAINT livro_ass_sigla_fk FOREIGN KEY (ass_sigla) REFERENCES assunto(ass_sigla)
)
;
CREATE TABLE escreve
(
liv_codigo NUMBER(10),
aut_matricula NUMBER (10),
CONSTRAINT escreve_liv_aut_pk PRIMARY KEY(liv_codigo,aut_matricula),
CONSTRAINT escreve_liv_codigo_fk FOREIGN KEY (liv_codigo) REFERENCES livro (liv_codigo),
CONSTRAINT escreve_liv_aut_matricula_fk FOREIGN KEY (aut_matricula) REFERENCES autor(aut_matricula)
);
Até então eu quero fazer um delete
Excluir o livro cujo título é Banco de Dados Distribuído ou Banco de Dados para WEB. Somente estas 2 opções devem ser consideradas;
DELETE
FROM livro
WHERE liv_titulo = 'banco de dados distribuído'
OR liv_titulo = 'banco de dados para a web';
E então apresenta esse erro:
Relatório de erro:
Erro de SQL: ORA-02292: restrição de integridade (ESCREVE_LIV_CODIGO_FK) violada - registro filho localizado
02292. 00000 - “integrity constraint (%s.%s) violated - child record found”
*Cause: attempted to delete a parent key value that had a foreign dependency.
*Action: delete dependencies first then parent or disable constraint.
E então eu fiz dessa maneira e deu certo!!!
[code]DELETE
FROM escreve
WHERE liv_codigo = 1;
DELETE
FROM livro
WHERE liv_titulo = 'banco de dados distribuído’
OR liv_titulo = ‘banco de dados para a web’;[/code]
Está correto?
Pois o meu professor diz “uma coisa é funcionar outra é estar certo”