Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Sprawdź, czy wiersz istnieje

W tej wersji:

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

... USERNAME tabeli kolumna jest porównywana ze sobą, więc zawsze będzie pasować. Nie porównujesz go ze zmienną lokalną. Jeśli chcesz to zrobić, musisz nadać zmiennej inną nazwę dla kolumny:

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;

Lub, jak sugeruje David Aldridge, użyj etykiety, aby odróżnić zmienną lokalną od kolumny tabeli:

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

Możesz użyć tego podejścia również z nazwanymi blokami; jeśli to było wewnątrz funkcji, możesz odwołać się do zmiennej lokalnej jako function_name.variable_name . Ponieważ jest to blok anonimowy, etykieta odgrywa taką samą rolę jak function_name zasadniczo.

Dokumentacja zawiera sekcję dotyczącą rozwiązywania nazw .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj zestawy poprawek bazy danych

  2. Oracle DROP TABLE IF EXISTS Alternatywy

  3. ORA-00979:nie jest wyrażeniem GROUP BY podczas wykonywania mojego sql

  4. Jak wprowadzić powiązania dla parametru wielowartościowego w SQL Developer

  5. Błędy PLS-00539 i PLS-00538 podczas tworzenia funkcji UDT