Có, bạn có thể sử dụng SQL%ROWCOUNT
. Nó hợp lệ trong PL / SQL.
Tuy nhiên, trong PL / SQL, kết quả truy vấn của bạn cần phải đi đâu đó, ví dụ:vào một bảng PL / SQL. PL / SQL sẽ không bao giờ gửi kết quả đến đầu ra (thiết bị đầu cuối, cửa sổ, v.v.). Vì vậy, SELECT * FROM
sẽ không hoạt động.
Mã của bạn có thể trông giống như sau:
DECLARE
TYPE emp_t ...;
emp_tab emp_t;
BEGIN
SELECT *
BULK COLLECT INTO emp_tab
FROM emp
WHERE empname = 'Justin' AND dept='IT';
IF sql%rowcount > 0 THEN
.. do something ...
END IF;
END;
/
Cập nhật :
Các câu hỏi cập nhật gợi ý rằng bạn đang tìm kiếm thứ gì đó khác.
Tùy chọn 1:Sử dụng ngoại lệ
Nếu có 0 hàng hoặc nhiều hơn 1 hàng, các trường hợp này được xử lý riêng (dưới dạng lỗi):
BEGIN
select PORT_NUMBER,STATIC_IP into outport, outIP
from TINST
where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y';
EXCEPTION
WHEN NO_DATA_FOUND THEN
outretvalue := -12;
RETURN;
WHEN TOO_MANY_ROWS THEN
outretvalue := -13;
RETURN;
END;
Tùy chọn 2:Sử dụng tổng hợp
Sử dụng tổng hợp, truy vấn sẽ luôn trả về chính xác một hàng. Nếu bây giờ hàng nguồn khớp với mệnh đề WHERE, thì cả hai giá trị kết quả sẽ là NULL. Nếu có mệnh đề WHERE khớp với nhiều hơn một hàng, thì giá trị tối đa sẽ được lấy.
Lưu ý rằng truy vấn này có thể trả về số cổng và địa chỉ IP ban đầu không nằm trên cùng một hàng.
select MAX(PORT_NUMBER), MAX(STATIC_IP) into outport, outIP
from TINST
where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y';
IF outport IS NULL OR outIP IS NULL THEN
outretvalue := -12;
RETURN;
END IF;
Tùy chọn 3:Sử dụng ROWNUM
Truy vấn này trả về nhiều nhất một hàng. Nếu không có hàng nào phù hợp với mệnh đề WHERE, một ngoại lệ sẽ được đưa ra và cần được xử lý:
BEGIN
select PORT_NUMBER, STATIC_IP into outport, outIP
from TINST
where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y'
AND ROWNUM = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
outretvalue := -12;
RETURN;
END;