Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Kích hoạt lỗi câu lệnh if-else không được đưa ra

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;

db <> fiddle

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cắt ngắn bảng trong Oracle gặp lỗi

  2. JdbcTemplate - Chèn hoặc cập nhật Oracle BLOB bằng SQL MERGE

  3. Kết nối bên trong SQL trên các câu lệnh chọn

  4. ORA-29283:thao tác tệp không hợp lệ ORA-06512:tại SYS.UTL_FILE, dòng 536

  5. % ROWTYPE biến từ tên bảng