Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle - Como forçar o usuário a INSERT várias linhas


Com o prefácio padrão de que não é assim que você realmente faria esse tipo de coisa no mundo real ...

Você realmente precisaria usar um gatilho de nível de instrução aqui. Se você não se importa com o impacto no desempenho de verificar todas as salas todas as vezes
CREATE OR REPLACE TRIGGER Living_AIUD
  AFTER INSERT OR UPDATE OR DELETE
  ON Living
DECLARE
  Count NUMBER;
BEGIN
  FOR x IN (SELECT rid, count(*) cnt
              FROM living
             GROUP BY rid
            HAVING COUNT(*) < 3)
  LOOP
    RAISE_APPLICATION_ERROR(-20002, 'Too few people in room ' || x.rid);
  END LOOP;
END Living_AIUD;

Se você não quiser verificar isso para todos os quartos todas as vezes, precisará de um pacote com uma coleção de rid valores, um gatilho de instrução antes que inicializou a coleção e um gatilho em nível de linha que adicionou o :new.rid valor à coleção. Seu gatilho de instrução after iteraria sobre os elementos da coleção e verificaria o número de pessoas apenas nessas salas.