Ir para conteúdo

POWERED BY:

Arquivado

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

HilarYo

descontar N de Vagas (Procedimento)

Recommended Posts

j0wjgh.jpg

 

Boas noites,

Alguém me pode ajudar a criar um procedimento, ou dar alguma sugestão se outra forma para o seguinte:

 

á medida de um cliente tabela(CLIENTES) se Inscreve tabela(INSCRICAO) nas aulas tabela(AULAS) sera retirado 1 valor do atributo vagas da tabelaAULAS

 

por exemplo uma aula de 25 vagas, ao um cliente se inscrever desconta uma aula e actualiza(UPDATE) para 24.

 

Obrigado, Cumps

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use uma trigger.

 

grosso Modo (precisa refinar)

 

create or replace trigger trg_inscricaobefore insert or deleteON INSCRICAOreferencing new as new old as oldfor each rowdeclare  VN NUMBER;begin  if insert then    vn := 1;  else    vn := -1;  END IF;   update aulas set vagas = vagas + vn  WHERE ID_AULA = NVL(:NEW.ID_AULA,:OLD.ID_AULA;END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use uma trigger.

 

Use uma trigger.

 

Obrigado, uma vez que quero mexer em duas colunas, de diferentes tabelas ao mesmo tempo, optei por um procedimento:

 

 

Procedimento para inserir clientes numa AULA:

 

create or replace PROCEDURE ADD_INSCRIÇAO (
p_CLIENTE INSCRICAO.ID_CLIENTE%TYPE,
p_AULA INSCRICAO.ID_AULA%TYPE) AS

v_NINSCRICOES number(10);
v_VAGAS number(10);

BEGIN
  SELECT NINSCRICOES
  into v_NINSCRICOES
  FROM CLIENTES
  WHERE ID_CLIENTE=p_CLIENTE;
  
  SELECT VAGAS
  into v_VAGAS
  FROM AULAS
  WHERE ID_AULA=p_AULA;
  

  if (p_CLIENTE = 0) then
      dbms_output.put_line('ERRO: O ID do CLIENTE não existe');
  elsif(p_AULA= 0) then
      dbms_output.put_line('ERRO: O ID da AULA não existe');
  elsif (v_NINSCRICOES = 0)then
      dbms_output.put_line('ERRO: O CLIENTE JA NÃO SE PODE INCREVER');
  elsif (v_VAGAS = 0) then
      dbms_output.put_line('ERRO: JÁ NÃO EXISTE VAGAS PARA A AULA');
  else
INSERT INTO INSCRICAO(DATA,ID_AULA,ID_CLIENTE)
VALUES (to_date(sysdate, 'yyyy/mm/dd hh24:mi:ss'),p_AULA,p_CLIENTE);

UPDATE AULAS
SET VAGAS=VAGAS-1
WHERE ID_AULA=p_AULA;

UPDATE CLIENTES
SET NINSCRICOES=NINSCRICOES-1
WHERE ID_CLIENTE=p_CLIENTE;

end if;
end;

Está a funcionar, apenas não funcionam todos os dbms_output.put_line('ERRO: JÁ NÃO EXISTE VAGAS PARA A AULA'); que deveriam de aparecer escrito no ecrã dbms_output.put_line('ERRO: JÁ NÃO EXISTE VAGAS PARA A AULA')

Alguem sabe a solução

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se está usando o sql plus falta

o

set server output on;

 

Outros programas tem a opção de ativar isto.

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.