Oracle
 sql >> база данни >  >> RDS >> Oracle

Предотвратяване на задействане на вмъкване

Разговарях с университетски преподавател, който преподаваше PL/SQL, след като направих презентация на конференция. Моят разговор беше за добрата практика на PL/SQL; един от моите слайдове просто казваше „Не използвайте тригери“. Преподавателят ми каза, че намира подобни съвети за трудни за съвместяване с нуждите на учебната програма. Те трябва да научат своите ученици на целия синтаксис, но той призна, че често поставят задачи, които изискват решения, които не бихме използвали, когато пишем професионално софтуер.

Това е такъв въпрос. Правилният подход е да се използва ограничение за проверка, както показва отговорът на Гордън . Ограниченията са по-ефективни и идиоматични. Но вашият учител иска да напишете тригер, така че ето вашия код, коригиран.

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;

Забележки:

  1. CREATE OR REPLACE означава, че можем да променим тригерния код без предварителен оператор DROP.
  2. НАЧАЛНИ и КРАЙНИ рамкови блокове от код, като например тела на тригери.
  3. Стичните условни изрази са рамкирани с ключови думи IF ... END IF; WHEN е за излизане от циклични конструкции.
  4. Стойности на колоната в справочната таблица с ключови думи :NEW (и :OLD) – обърнете внимание на двоеточието.
  5. Използвайте RAISE_APPLICATION_ERROR, за да хвърлите изключение; номерът на грешката трябва да бъде в диапазона от -20999 до -20000, който Oracle запазва за дефинирани от потребителя изключения.
  6. Направете съобщението си за грешка смислено:кажете на потребителите си какво са направили грешно, вместо да ги карате да гадаят.
  7. Научете се да използвате отстъп, за да направите кода си четим. Вашите бъдещи колеги ще ви благодарят за това.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Политика за корекция

  2. Стъпка по стъпка процес на надграждане до R12.2 Надстройка част -2 (Главен драйвер за надстройка за R12.2.0)

  3. ЗАДАЙТЕ SQLBLANKLINES:Как да разрешите празни редове в SQLcl &SQL*Plus

  4. две леви външни съединения не работят Oracle sql

  5. Групиране по срещу разделяне по в Oracle