7

Có thể tạo điều kiện tùy chỉnh khi tôi đưa ra ngoại lệ không? Hãy xem xét ví dụ sau:Điều kiện ngoại lệ tùy chỉnh PostgreSQL

BEGIN  
    y := x/0; 
EXCEPTION 
    WHEN division_by_zero THEN 
     RAISE NOTICE 'caught division_by_zero'; 
     RETURN x; 
END; 

Ở đây tôi sử dụng điều kiện 'division_by_zero' để bắt ngoại lệ. Điều tôi muốn làm là một cái gì đó như thế này:

BEGIN  
    [...] 
    RAISE custom_condition; 
EXCEPTION 
    WHEN custom_condition THEN 
     [...] 
END; 

để tôi không can thiệp vào các ngoại lệ tiêu chuẩn có thể có. Tôi chỉ có thể làm y: = 1/0; và bắt division_by_zero, nhưng nó không nhìn đúng. Thông tin

Trả lời

15
begin 
    if $1='bar' then 
     raise exception using 
      errcode='NOBAR', 
      message='Bar is prohibited', 
      hint='We do not talk to this guy'; 
    end if; 
exception 
    when sqlstate 'NOBAR' then 
     update nobar_raised set count=count+1; 
end; 

thêm:

+10

Cảm ơn! Nó hoạt động với một hiệu chỉnh - tham số * errcode * phải chính xác năm chữ số/ký tự ASCII viết hoa, nếu không nó sẽ gây ra lỗi ('mã SQLSTATE không hợp lệ'). Đây là một lưu ý từ liên kết của bạn: 'Lưu ý: Khi chỉ định mã lỗi bằng mã SQLSTATE, bạn không bị giới hạn ở mã lỗi được xác định trước, nhưng có thể chọn bất kỳ mã lỗi nào gồm năm chữ số và/hoặc chữ cái ASCII viết hoa, hơn 00000. Chúng tôi khuyên bạn nên tránh các mã lỗi kết thúc bằng ba số không, vì đây là các mã danh mục và chỉ có thể bị bẫy bằng cách bẫy toàn bộ danh mục.' – Snifff

+0

@Sniff: Cảm ơn - Tôi đã sửa trường hợp các ký tự errcode – Tometzky

+0

@Tometzky: Thuộc tính nào theo ngoại lệ. Nhận thức 'Bar bị cấm' hiển thị dưới đây? Có phải MESSAGE_TEXT hoặc PG_EXCEPTION_DETAIL hoặc PG_EXCEPTION_HINT không? (tài liệu: http://goo.gl/F5w1y) – obimod

Các vấn đề liên quan