W tej wersji:
SELECT COUNT(*)
INTO isFound
FROM MyTable
WHERE USERNAME = userName
AND ROWNUM = 1;
... USERNAME
tabeli kolumna jest porównywana ze sobą, więc zawsze będzie pasować. Nie porównujesz go ze zmienną lokalną. Jeśli chcesz to zrobić, musisz nadać zmiennej inną nazwę dla kolumny:
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;
Lub, jak sugeruje David Aldridge, użyj etykiety, aby odróżnić zmienną lokalną od kolumny tabeli:
<<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;
...
Możesz użyć tego podejścia również z nazwanymi blokami; jeśli to było wewnątrz funkcji, możesz odwołać się do zmiennej lokalnej jako function_name.variable_name
. Ponieważ jest to blok anonimowy, etykieta odgrywa taką samą rolę jak function_name
zasadniczo.
Dokumentacja zawiera sekcję dotyczącą rozwiązywania nazw .