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

Грешка в израза if-else на задействане не се повдига

Тригерът работи както очаквате, когато актуализирате таблицата ръчно.

Когато се извика от процедурата, тригерът не отчита невалидна сума и показва пълната сума като платена, дори и да не е - сумата на плащането не се променя, но другите колони са.

Това е така, защото изразът за актуализиране на вашата процедура е:

UPDATE Payment
SET paymenttype = PAYMENT_TYPE,
  paymentdate = TO_CHAR(sysdate,'DD/MON/YYYY'),
  paymentstatus = v_paymentstatus
where paymentid = PAYMENT_ID;

Не му казвате да актуализира сумата, така че тригерът няма модифициран :new стойност - старото и новото са еднакви. Трябва да включите тази колона в актуализацията:

UPDATE Payment
SET paymenttype = PAYMENT_TYPE,
  paymentdate = TO_CHAR(sysdate,'DD/MON/YYYY'),
  paymentamount = amt_pay,
  paymentstatus = v_paymentstatus
where paymentid = PAYMENT_ID;

db<>fiddle

TO_CHAR(sysdate,'DD/MON/YYYY') изглежда странно - колоната на таблицата трябва да е дата, а не низ, така че не трябва да конвертирате тази стойност в низ; ако колоната е дата, тогава разчитате на NLS настройките на клиента, за да я конвертирате обратно. Ако се опитвате да игнорирате текущия час, можете да направите TRUNC(sysdate) вместо това.

Също така не трябва да разчитате на dbms_output в тялото на процедурата - не можете да контролирате дали някой, който вика това, има активиран изход, така че може никога да не види проблем. Тъй като предизвиквате изключение в тригера, можете да направите същото в процедурата за другите грешки.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORACLE RAW във формат на низ към стандартен GUID

  2. Как мога да се свържа с база данни на oracle като sysdba с помощта на bltoolkit?

  3. Изтрийте с ляво присъединяване в Oracle 10g

  4. SQLException:ORA-06550 при извикване на PL/SQL функция от Java

  5. Разделен със запетаи низ за списък