sql >> Databasteknik >  >> RDS >> Oracle

Kontrollera om rad finns

I denna version:

  SELECT COUNT(*)
    INTO isFound
    FROM MyTable
   WHERE USERNAME = userName
     AND ROWNUM = 1;

... tabellens USERNAME kolumnen jämförs med sig själv, så den kommer alltid att matcha. Du jämför den inte med den lokala variabeln. Om du vill göra det måste du ge variabeln ett annat namn till kolumnen:

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 föreslår, använd en etikett för att skilja den lokala variabeln från tabellkolumnen:

<<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 använda den metoden med namngivna block också; om detta var inuti en funktion kan du referera till en lokal variabel som function_name.variable_name . Eftersom detta är ett anonymt block spelar etiketten samma roll som function_name skulle i huvudsak.

Dokumentationen har ett avsnitt om namnupplösning .



  1. Java ZonedDateTime sparas i databasen

  2. RMAN-kommandon misslyckas med ORA-00904:"BS".."GUID":ogiltig identifierare

  3. Jag har en rad heltal, hur använder jag var och en i en mysql-fråga (i php)?

  4. MySQL på Docker - Hur du containeriserar din databas:Nytt vitbok