Mortágua 0 Denunciar post Postado Dezembro 23, 2009 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
Motta 645 Denunciar post Postado Dezembro 23, 2009 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