I denne version:
SELECT COUNT(*)
INTO isFound
FROM MyTable
WHERE USERNAME = userName
AND ROWNUM = 1;
... tabellens USERNAME
kolonne bliver sammenlignet med sig selv, så den vil altid matche. Du sammenligner den ikke med den lokale variabel. Hvis du vil gøre det, skal du give variablen et andet navn til kolonnen:
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;
Eller som David Aldridge foreslår, brug en etiket til at skelne den lokale variabel fra tabelkolonnen:
<<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;
...
Du kan også bruge den tilgang med navngivne blokke; hvis dette var inde i en funktion, kunne du henvise til en lokal variabel som function_name.variable_name
. Da dette er en anonym blok, spiller etiketten samme rolle som function_name
ville i det væsentlige.
Dokumentationen har et afsnit om navneløsning .