sql >> Database teknologi >  >> RDS >> Oracle

Oracle - Sådan tvinges brugeren til at INDSÆTTE flere rækker

Med standardforordet, at det ikke er sådan, du virkelig ville gøre den slags ting i den virkelige verden...

Du ville realistisk set skulle bruge en udløser på statement-niveau her. Hvis du ikke har noget imod det præstationsmæssige hit ved at tjekke hvert værelse hver gang

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;

Hvis du ikke vil tjekke dette for hvert værelse hver gang, skal du have en pakke med en samling af rid værdier, en før-sætningsudløser, der initialiserede samlingen, og en trigger på rækkeniveau, der tilføjede :new.rid værdi for samlingen. Din efterudsagnsudløser ville derefter gentage elementerne i samlingen og kontrollere antallet af personer i netop disse rum.




  1. Hent feltværdi fra en post, der får en aggregeret betingelse til at være sand

  2. Mysql slette flere rækker i array

  3. Django MySQL særskilt forespørgsel for at få flere værdier

  4. java.sql.SQLException:Ugyldig argumentværdi:java.io.NotSerializableException