Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Вам совсем не нужно DELIMITER $$
. Это команда mysql, встроенная в команду . Встроенные клиенты не распознаются парсером SQL.
Вы можете просто выполнить оператор CREATE TRIGGER
как единый оператор, и вам не нужно иметь разделитель в конце инструкции. Разделители важны только для интерфейсов, поддерживающих несколько операторов (например, клиент mysql).
phpMyAdmin также разрешает несколько операторов, поэтому вам нужно установить разделитель, но это делается с помощью интерфейса пользовательского интерфейса, а не DELIMITER
. См. Процедуры сохранения в phpMyAdmin
Выполните его прямо в PhpmyAdmin и удалите один избыточный END
DELIMITER $$
CREATE TRIGGER FP_PAGO_AU AFTER UPDATE ON FORMA_PGTO
FOR EACH ROW
BEGIN
declare rec_count integer;
declare pg_count integer;
declare cp_pago integer;
select count(*) from forma_pgto fp where fp.id_cpagar=new.id_cpagar into rec_count;
select count(pago) from forma_pgto f where f.id_cpagar=new.id_cpagar and f.pago=1 into pg_count;
/* Se todas parcelas estao pagas, entao setar conta paga */
if (rec_count = pg_count) then
update cpagar c set c.pago=1 where c.id=new.id_cpagar;
/* Senao */
else
/* Se CPAGAR.PAGO = 1, recebe 0 */
select cpg.pago from cpagar cpg where cpg.id=new.id_cpagar into cp_pago;
if (cp_pago = 1) then /* Se cp_pago = 1 */
update cpagar set pago=0 where id=new.id_cpagar;
end if;
end if;
END $$
DELIMITER ;