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

Kiểm tra xem hàng có tồn tại không

Trong phiên bản này:

  SELECT COUNT(*)
    INTO isFound
    FROM MyTable
   WHERE USERNAME = userName
     AND ROWNUM = 1;

... USERNAME của bảng đang được so sánh với chính nó, vì vậy nó sẽ luôn khớp. Bạn không so sánh nó với biến cục bộ. Nếu bạn muốn làm điều đó, bạn sẽ cần đặt tên biến khác cho cột:

declare
  isFound  NUMBER;
  localUserName VARCHAR2(30);
begin
  isFound  := 0;
  userName := 'aaaaaa';

  SELECT COUNT(*)
    INTO isFound
    FROM MyTable
   WHERE USERNAME = localUserName
     AND ROWNUM = 1;

  IF isFound > 0 THEN
    dbms_output.put_line('Found');
  ELSE
    dbms_output.put_line('Not found');
  END IF;

end;

Hoặc như David Aldridge đề xuất, hãy sử dụng nhãn để phân biệt biến cục bộ với cột bảng:

<<local>>
declare
  isFound  NUMBER;
  userName MyTable.USERNAME%TYPE;
begin
  isFound  := 0;
  userName := 'aaaaaa';

  SELECT COUNT(*)
    INTO isFound
    FROM MyTable
   WHERE USERNAME = local.userName
     AND ROWNUM = 1;
...

Bạn cũng có thể sử dụng cách tiếp cận đó với các khối được đặt tên; nếu điều này nằm trong một hàm, bạn có thể tham chiếu đến một biến cục bộ là function_name.variable_name . Vì đây là khối ẩn danh nên nhãn đóng vai trò giống như function_name về cơ bản sẽ.

Tài liệu có phần về giải pháp tên .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 cách trả về hàng không chứa giá trị số trong Oracle

  2. Cách xuất dữ liệu trường clob trong nhà phát triển sql oracle

  3. Có thể sử dụng trả lại trong thủ tục được lưu trữ không?

  4. Chọn hàng thứ hai của bảng bằng rownum

  5. Tất cả các kết hợp vòng tròn có thể có trong SQL giữa hai bảng