V této verzi:
SELECT COUNT(*)
INTO isFound
FROM MyTable
WHERE USERNAME = userName
AND ROWNUM = 1;
... USERNAME
tabulky sloupec se porovnává sám se sebou, takže se bude vždy shodovat. Neporovnáváte to s lokální proměnnou. Pokud to chcete udělat, budete muset proměnnou pojmenovat sloupec jinak:
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;
Nebo, jak navrhuje David Aldridge, použijte popisek k odlišení lokální proměnné od sloupce tabulky:
<<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;
...
Tento přístup můžete použít také s pojmenovanými bloky; pokud to bylo uvnitř funkce, můžete odkazovat na místní proměnnou jako function_name.variable_name
. Protože se jedná o anonymní blok, štítek hraje stejnou roli jako function_name
by v podstatě.
Dokumentace obsahuje část o rozlišení názvů .