Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Periksa apakah ada baris

Dalam versi ini:

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

... tabel USERNAME kolom sedang dibandingkan dengan dirinya sendiri, sehingga akan selalu cocok. Anda tidak membandingkannya dengan variabel lokal. Jika Anda ingin melakukannya, Anda harus memberi variabel nama yang berbeda ke kolom:

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;

Atau seperti yang disarankan David Aldridge, gunakan label untuk membedakan variabel lokal dari kolom tabel:

<<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;
...

Anda dapat menggunakan pendekatan itu dengan blok bernama juga; jika ini berada di dalam suatu fungsi, Anda dapat merujuk ke variabel lokal sebagai function_name.variable_name . Karena ini adalah blok anonim, label memainkan peran yang sama dengan function_name akan, pada dasarnya.

Dokumentasi memiliki bagian tentang resolusi nama .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memanfaatkan WebDev.WebServer.exe (VS Web Server) di x64?

  2. Apakah mungkin untuk merujuk ke nama kolom melalui variabel bind di Oracle?

  3. Oracle - perbarui tabel yang sama tempat pemicu diaktifkan

  4. Jalankan prosedur dalam pemicu

  5. Cara mendapatkan data BLOB menggunakan Oracle ODBC