#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 /