Oracle
 sql >> база данни >  >> RDS >> Oracle

Проверете дали съществува ред

В тази версия:

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

... USERNAME на таблицата колона се сравнява със себе си, така че винаги ще съвпада. Не го сравнявате с локалната променлива. Ако искате да направите това, ще трябва да дадете на променливата различно име на колоната:

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;

Или както предлага Дейвид Олдридж, използвайте етикет, за да разграничите локалната променлива от колоната на таблицата:

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

Можете да използвате този подход и с именувани блокове; ако това беше във функция, можете да се обърнете към локална променлива като function_name.variable_name . Тъй като това е анонимен блок, етикетът играе същата роля като function_name би по същество.

Документацията има раздел за разделяне на имена .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализирайте колона в таблица, като използвате произволно избрани уникални стойности от друга таблица

  2. PDO изключение не се хвърля за грешки на задействане

  3. Oracle връзките са прекъснати в SSIS след деинсталиране на 32-битова версия на Oracle клиент

  4. Регистриране на Oracle SQL заявка

  5. Уверете се, че php сесията получава същата сесия на oracle, когато използвате oci_pconnect