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

Czy można użyć sql%rowcount dla SELECT?

Tak, możesz użyć SQL%ROWCOUNT . Działa w PL/SQL.

Jednak w PL/SQL wynik Twojego zapytania musi gdzieś trafić. do tabeli PL/SQL. PL/SQL nigdy nie wyśle ​​wyniku do wyjścia (terminal, okno itp.). Więc SELECT * FROM nie zadziała.

Twój kod może wyglądać tak:

DECLARE
  TYPE emp_t ...;
  emp_tab emp_t;

BEGIN
  SELECT *
  BULK COLLECT INTO emp_tab
  FROM emp
  WHERE empname = 'Justin' AND dept='IT';

  IF sql%rowcount > 0 THEN
    .. do something ...
  END IF;
END;
/

Aktualizacja :

Zaktualizowane pytania sugerują, że szukasz czegoś innego.

Opcja 1:Użyj wyjątków

Jeśli jest 0 wierszy lub więcej niż 1, te przypadki są obsługiwane osobno (jako błędy):

BEGIN
  select PORT_NUMBER,STATIC_IP into outport, outIP
  from TINST
  where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y';

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    outretvalue := -12;
    RETURN;

  WHEN TOO_MANY_ROWS THEN
    outretvalue := -13;
    RETURN;
END;

Opcja 2:użyj agregacji

Używając agregacji, zapytanie zawsze zwróci dokładnie jeden wiersz. Jeśli teraz wiersz źródłowy pasuje do klauzuli WHERE, obie wartości wyników będą miały wartość NULL. Jeśli klauzula WHERE pasuje do więcej niż jednego wiersza, zostanie przyjęte maksimum.

Pamiętaj, że to zapytanie może zwrócić numer portu i adres IP, które pierwotnie nie znajdowały się w tym samym wierszu.

select MAX(PORT_NUMBER), MAX(STATIC_IP) into outport, outIP
from TINST
where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y';

IF outport IS NULL OR outIP IS NULL THEN
    outretvalue := -12;
    RETURN;
END IF;

Opcja 3:Użyj ROWNUM

To zapytanie zwraca co najwyżej jeden wiersz. Jeśli żaden wiersz nie pasuje do klauzuli WHERE, zgłaszany jest wyjątek, który wymaga obsługi:

BEGIN
  select PORT_NUMBER, STATIC_IP into outport, outIP
  from TINST
  where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y'
  AND ROWNUM = 1;

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    outretvalue := -12;
    RETURN;

END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle wyodrębnia numer zmiennej z łańcucha

  2. Używanie nzload do ładowania znaków specjalnych

  3. Funkcja odroczonego tworzenia segmentów nie jest włączona (ORA-00439)

  4. Jak wywołać funkcję Oracle, która ma SYS_REFCURSOR jako parametr OUT?

  5. Widok Oracle nie podlega aktualizacji, porady dotyczące zamiast wyzwalaczy