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

Zapobiegaj wstawianiu spustu

Rozmawiałem z wykładowcą uniwersyteckim, który uczył języka PL/SQL po tym, jak wygłosiłem prezentację na konferencji. Mój wykład dotyczył dobrych praktyk PL/SQL; jeden z moich slajdów po prostu powiedział „Nie używaj wyzwalaczy”. Wykładowca powiedział mi, że trudno mu pogodzić takie rady z potrzebami programu nauczania. Muszą nauczyć swoich uczniów całej składni, ale przyznał, że często wyznaczają zadania wymagające rozwiązań, których nie użylibyśmy podczas profesjonalnego pisania oprogramowania.

To jest takie pytanie. Prawidłowym podejściem jest użycie ograniczenia sprawdzającego, jak pokazuje odpowiedź Gordona . Ograniczenia są bardziej wydajne i też idiomatyczne. Ale twój nauczyciel chce, abyś napisał wyzwalacz, więc oto poprawiony kod.

CREATE OR REPLACE TRIGGER CheckAdvance
    BEFORE INSERT OR UPDATE OF advance ON titles
    FOR EACH ROW
BEGIN
    IF (:new.advance < 0  
         OR :new.advance > 100)
    THEN
        raise_application_error(-20000
                , 'Advance cannot be less than zero or greater than one hundred.');
    END IF;
END;

Punkty do odnotowania:

  1. CREATE OR REPLACE oznacza, że ​​możemy zmienić kod wyzwalacza bez wstępnej instrukcji DROP.
  2. BEGIN i END bloki kodu, takie jak ciała wyzwalające.
  3. Statyczne warunki warunkowe są umieszczane w ramkach za pomocą słów kluczowych IF ... END IF; WHEN służy do wychodzenia z konstrukcji pętli.
  4. Wartości kolumn tabeli referencyjnej ze słowami kluczowymi :NEW (i :OLD) – zwróć uwagę na dwukropek.
  5. Użyj RAISE_APPLICATION_ERROR, aby zgłosić wyjątek; numer błędu musi mieścić się w zakresie od -20999 do -20000, który Oracle rezerwuje dla wyjątków zdefiniowanych przez użytkownika.
  6. Spraw, by komunikat o błędzie był znaczący:powiedz użytkownikom, co zrobili źle, zamiast zmuszać ich do zgadywania.
  7. Dowiedz się, jak używać wcięć, aby kod był czytelny. Twoi przyszli współpracownicy ci za to podziękują.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie Oracle Pivot daje kolumny z cudzysłowami wokół nazw kolumn. Co?

  2. Zduplikowana definicja dla:„identifiedType”

  3. CSV w programie SQL Developer…

  4. Migracja kolumn Oracle DATE do TIMESTAMP ze strefą czasową

  5. Przekazanie tablicy ciągów do procedury i użycie jej w klauzuli WHERE z IN