2011-09-06 44 views
6

Tôi cần chọn biến cục bộ chỉ khi có dữ liệu.PL/SQL được chọn - nếu dữ liệu tồn tại

SELECT column1 INTO local_variable FROM table1 where column2 = <condition>; 

Ở đây nếu không có dữ liệu nào khớp với điều kiện, tôi sẽ không gặp phải lỗi tìm thấy dữ liệu.

Tôi chỉ cần chọn biến cục bộ khi có một số dữ liệu khớp với điều kiện. Có một truy vấn đơn giản mà sẽ giải quyết vấn đề của tôi.

Trả lời

12

Có lẽ cách tốt nhất là để xử lý no_data_found

begin 
    SELECT column1 INTO local_variable 
    FROM table1 where column2 = p_val; 
exception 
    when no_data_found then 
    local_variable := null; 
end; 

Ngoài ra, nếu bạn đang chọn với khóa chính/khóa duy nhất (có nghĩa là column2 là duy nhất), sau đó có một thủ thuật bạn có thể làm

SELECT max(column1) INTO local_variable 
    FROM table1 where column2 = p_val; 
+0

Tại sao max() cần thiết? – shawnt00

+0

Bạn sẽ không nhận được no_data_found khi bạn chọn max(), bạn sẽ chỉ nhận được giá trị null khi không tồn tại hàng nào 'where column2 = p_val'. Vì vậy, đây chỉ là một thủ thuật có thể được sử dụng để bảo vệ chống lại ngoại lệ no_data_found, mặc dù tôi tin rằng nó là tốt hơn để xử lý ngoại lệ này một cách rõ ràng. – bpgergo

1

Chà ... hãy đếm trước khi chọn. Hoặc chỉ xử lý ngoại lệ no_data_found.

Bạn có thể mở con trỏ và tìm nạp các hàng, thực hiện đếm và nếu số đó lớn hơn 0 rồi thực hiện công cụ của bạn với bản ghi đó

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