sql >> Database teknologi >  >> RDS >> Oracle

Tjek om rækken findes

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 .



  1. Ruby sort_by for arrays returneret af MySQL, dato formateret som streng

  2. Hastighed:MySQL vs filoutput

  3. Tilføj præfiks til auto-increment i mysql db

  4. Internaler i de syv SQL Server-sorteringer – Del 2