sql >> Databasteknik >  >> RDS >> Oracle

Oracle - Hur man tvingar användaren att INFOGA flera rader

Med standardförordet att det inte är så du verkligen skulle göra sånt här i den verkliga världen...

Du skulle realistiskt sett behöva använda en utlösare på uttalandenivå här. Om du inte har något emot prestandaträffen med att kontrollera varje rum varje gång

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;

Om du inte vill kontrollera detta för varje rum varje gång, skulle du behöva ett paket med en samling rid värden, en before-satsutlösare som initierade samlingen och en utlösare på radnivå som lade till :new.rid värde för samlingen. Din efterutlösare skulle sedan iterera över elementen i samlingen och kontrollera antalet personer i just dessa rum.




  1. SQL-fråga med ON DUPLICATE KEY UPDATE förtydligande behövs

  2. Ta bort nummer från sträng i mysql

  3. Implementering av blockerade datum för en ORM-modell för användarhändelser

  4. Skickar SQL-operatorer för att fråga genom iReport Parameter