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 .