Trình kích hoạt hoạt động như bạn mong đợi khi bạn cập nhật bảng theo cách thủ công.
Khi được gọi từ thủ tục, trình kích hoạt không báo cáo số tiền không hợp lệ và hiển thị toàn bộ số tiền đã được thanh toán ngay cả khi không phải là số tiền thanh toán - số tiền thanh toán không thay đổi so với các cột khác.
Đó là vì câu lệnh cập nhật thủ tục của bạn là:
UPDATE Payment
SET paymenttype = PAYMENT_TYPE,
paymentdate = TO_CHAR(sysdate,'DD/MON/YYYY'),
paymentstatus = v_paymentstatus
where paymentid = PAYMENT_ID;
Bạn không yêu cầu nó cập nhật số tiền, vì vậy trình kích hoạt không có :new
được sửa đổi giá trị - cũ và mới là như nhau. Bạn cần đưa cột đó vào bản cập nhật:
UPDATE Payment
SET paymenttype = PAYMENT_TYPE,
paymentdate = TO_CHAR(sysdate,'DD/MON/YYYY'),
paymentamount = amt_pay,
paymentstatus = v_paymentstatus
where paymentid = PAYMENT_ID;
TO_CHAR(sysdate,'DD/MON/YYYY')
trông có vẻ kỳ lạ - cột của bảng phải là một ngày không phải là một chuỗi, vì vậy bạn không nên chuyển đổi giá trị đó thành một chuỗi; nếu cột là ngày thì bạn đang dựa vào cài đặt NLS của khách hàng để chuyển đổi lại. Nếu bạn đang cố gắng bỏ qua thời gian hiện tại thì bạn có thể thực hiện TRUNC(sysdate)
thay vào đó.
Bạn cũng không nên dựa vào dbms_output
trong phần thân thủ tục - bạn không thể kiểm soát việc ai đó gọi điều này đã bật đầu ra để họ có thể không bao giờ gặp sự cố hay không. Khi bạn tăng một ngoại lệ trong trình kích hoạt, bạn có thể thực hiện tương tự trong quy trình đối với các lỗi khác.