как устранить предупреждение: триггер, созданный с ошибками компиляции

#plsql

#plsql

Вопрос:

Я пытаюсь создать триггер, в котором, если общее количество клиентов достигает 10, должно возникнуть сообщение об ошибке

Это мой код plsql:

     SQL> CREATE OR REPLACE TRIGGER customer_count_check
  2  BEFORE INSERT OR UPDATE ON customer2
  3  FOR EACH ROW
  4  DECLARE
  5  count_customer NUMBER(5);
  6  BEGIN
  7  SELECT COUNT(*) INTO count_customer FROM customer2
  8           WHERE cusid = :new.cusid;
  9  IF count_customer > 10 THEN
 10   Raise_application_error(-20000,'Maximum customer count:' ||
 11               count_customer || 'reached');
 12  ENDIF;
 13  END;
 14  /
  

и это предупреждение, которое я получаю:

 Warning: Trigger created with compilation errors.

SQL> SHOW ERROR; 
Errors for TRIGGER CUSTOMER_COUNT_CHECK:

LINE/COL ERROR
-------- ----------------------------------------------------------------- 
10/4     PLS-00103: Encountered the symbol ";" when expecting one of the
         following:
         if
  

Комментарии:

1. Я изменил его … на самом деле я смешал его с другим кодом, поэтому имя переменной было другим..

2. Это end if не endif : docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls /…

Ответ №1:

Иногда я также желаю, чтобы сообщения об ошибках были более четкими.

В строке 12:

Неправильно

 ENDIF;
  

Правильно:

 END IF;
  

Также подсчет строк иногда не так интуитивно понятен. Он говорит 10/4, хотя кажется, что это 12/4. Но первые 2 строки не считаются частью кода триггеров, и поэтому подсчет ведется в строке 10 столбца 4.

Ответ №2:

 SQL> CREATE OR REPLACE TRIGGER customer_count_check
  2  BEFORE INSERT OR UPDATE ON customer2
  3  FOR EACH ROW
  4  DECLARE
  5  count_customer NUMBER(5);
  6  BEGIN
  7  SELECT COUNT(*) INTO count_customer FROM customer2
  8           WHERE cusid = :new.cusid;
  9  IF count_customer > 10 THEN
 10   Raise_application_error(-20000,'Maximum customer count:' ||
 11               count_customer || 'reached');
 12  END IF;
 13  END;
 14  /