sql >> Databáze >  >> RDS >> Oracle

Zkontrolujte, zda existuje řádek

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ů .



  1. Prozkoumejte příčiny a řešení poškození databáze SQL Server

  2. PostgreSQL:Smyčka, dokud není podmínka pravdivá

  3. Zobrazit všechny výsledky v postgresql?

  4. Vývojář PL/SQL, jak získat řádek, který způsobil selhání vložení?