Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mortágua

Problema a criar procedure

Recommended Posts

Boa noite, estou a fazer um trabalho e como é a primeira vez que uso oracle estou a ter algumas dificuldades a trabalhar com procedimentos.

 

É o seguinte, o que eu pretendo é criar um trigger que é acionado ao apagar algo da tabela Medicos.. Ou seja, quero apagar uma especialidade da tabela especialidade caso não haja nenhuma referencia na tabela medicos.

 

CREATE TABLE  "ESPECIALIDADE" 
   (	"C_ESPECIALIDADE" NUMBER(4,2) NOT NULL ENABLE, 
	"ESPECIALIDADE" VARCHAR2(500) NOT NULL ENABLE, 
	"PRECO" NUMBER NOT NULL ENABLE, 
	 CONSTRAINT "ESPECIALIDADE_PK" PRIMARY KEY ("C_ESPECIALIDADE") ENABLE
   )
/


CREATE TABLE  "MEDICOS" 
   (	"N_ORDEM" NUMBER(*,0) NOT NULL ENABLE, 
	"NOME" VARCHAR2(100) NOT NULL ENABLE, 
	"N_CONTRIBUINTE" NUMBER(20,0) NOT NULL ENABLE, 
	"TELEFONE" NUMBER(15,0) NOT NULL ENABLE, 
	"MORADA" VARCHAR2(100) NOT NULL ENABLE, 
	"C_ESPECIALIDADE" NUMBER(10,0) NOT NULL ENABLE, 
	"FOTO" BLOB, 
	"DATA_NASCIMENTO" DATE NOT NULL ENABLE, 
	"DATA_INICIO_SERVICO" DATE NOT NULL ENABLE, 
	 CONSTRAINT "MEDICOS_PK" PRIMARY KEY ("N_ORDEM") ENABLE, 
	 CONSTRAINT "MEDICOS_ESPECIALIDADE_FK1" FOREIGN KEY ("C_ESPECIALIDADE")
	  REFERENCES  "ESPECIALIDADE" ("C_ESPECIALIDADE") ENABLE
   )
/


CREATE TRIGGER especialidade_sem_ref
AFTER DELETE ON Medicos
FOR EACH ROW
EXECUTE PROCEDURE apaga_esp_sem_ref();



create or replace procedure "APAGA_ESP_SEM_REF"
(espec IN NUMBER default Null)
is
begin
espec := OLD.c_especialidade;
IF NOT EXISTS (SELECT * FROM Medicos
WHERE c_especialidade = espec)
THEN
DELETE FROM Especialidade WHERE c_especialidade = espec;
END IF;
RETURN NULL;
end;
/   

 

O problema é aqui na procedure.. que erros estou a cometer? Será que me podem ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é preciso a trigger , a constraint de fk com a opção de deleção cascade resolve o problema , dá uma lida na documentação que é simples de implementar.

 

O site da Oracle tem a documentação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.