In dieser Version:
SELECT COUNT(*)
INTO isFound
FROM MyTable
WHERE USERNAME = userName
AND ROWNUM = 1;
... den USERNAME
der Tabelle -Spalte wird mit sich selbst verglichen, sodass sie immer übereinstimmt. Sie vergleichen es nicht mit der lokalen Variablen. Wenn Sie das tun möchten, müssen Sie der Variable einen anderen Namen für die Spalte geben:
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;
Oder verwenden Sie, wie David Aldridge vorschlägt, ein Label, um die lokale Variable von der Tabellenspalte zu unterscheiden:
<<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;
...
Sie können diesen Ansatz auch mit benannten Blöcken verwenden; Wenn sich dies innerhalb einer Funktion befände, könnten Sie auf eine lokale Variable als function_name.variable_name
verweisen . Da es sich um einen anonymen Block handelt, spielt das Label die gleiche Rolle wie function_name
würde, im Wesentlichen.
Die Dokumentation enthält einen Abschnitt zur Namensauflösung .