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

Có thể sử dụng sql% rowcount cho SELECT không?

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Tương đương với Oracle 'CONNECT BY PRIOR' và 'ORDER SIBLINGS BY'

  2. ORACLE APEX - Thiết lập một Nút để điền vào một trường văn bản

  3. Quy trình đăng nhập trong R12.2 và cách khắc phục sự cố cơ bản

  4. Truy vấn Oracle để Loại trừ các ngày cuối tuần và 6 giờ chiều đến 9 giờ tối

  5. Oracle:Nếu bảng tồn tại