Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle — jak zmusić użytkownika do WSTAWIANIA wielu wierszy

Ze standardowym przedmową, że tak naprawdę nie robiłbyś tego rodzaju rzeczy w prawdziwym świecie...

Realistycznie musiałbyś użyć tutaj wyzwalacza na poziomie instrukcji. Jeśli nie masz nic przeciwko hitowi wydajności polegającemu na sprawdzaniu każdego pokoju za każdym razem

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;

Jeśli nie chcesz za każdym razem sprawdzać tego dla każdego pokoju, potrzebujesz pakietu z kolekcją rid wartości, wyzwalacz instrukcji before, który zainicjował kolekcję, oraz wyzwalacz na poziomie wiersza, który dodał :new.rid wartość do kolekcji. Twój wyzwalacz po oświadczeniu będzie następnie iterował po elementach w kolekcji i sprawdzał liczbę osób w tylko tych pokojach.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak korzystać z sekwencji Oracle DB bez utraty następnego numeru sekwencji w przypadku wycofania?

  2. jak wykonać wiele zapytań Oracle c#

  3. Funkcja POWER() w Oracle

  4. W jakich warunkach ROWNUM=1 znacząco zwiększa wydajność w istniejącym zapytaniu stylu?

  5. EF 5 z Oracle edmx StoreGeneratedPattern=Problem z tożsamością