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

Je možné použít sql%rowcount pro SELECT?

Ano, můžete použít SQL%ROWCOUNT . Je platný v PL/SQL.

V PL/SQL však musí výsledek vašeho dotazu někam směřovat, např. do PL/SQL tabulky. PL/SQL nikdy nepošle výsledek na výstup (terminál, okno atd.). Takže SELECT * FROM nebude fungovat.

Váš kód může vypadat takto:

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

Aktualizovat :

Aktualizované otázky naznačují, že hledáte něco jiného.

Možnost 1:Použít výjimky

Pokud existuje 0 řádků nebo více než 1 řádek, jsou tyto případy řešeny samostatně (jako chyby):

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;

Možnost 2:Použijte agregace

Pomocí agregací dotaz vrátí vždy přesně jeden řádek. Pokud nyní zdrojový řádek odpovídá klauzuli WHERE, budou obě výsledné hodnoty NULL. Pokud klauzule WHERE odpovídá více než jednomu řádku, bude použito maximum.

Upozorňujeme, že tento dotaz může vrátit číslo portu a IP adresu, které původně nebyly na stejném řádku.

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;

Možnost 3:Použijte ROWNUM

Tento dotaz vrátí nejvýše jeden řádek. Pokud žádný řádek neodpovídá klauzuli WHERE, je vyvolána výjimka a je třeba ji zpracovat:

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. Klonovat ORACLE_HOME

  2. Nastavte hodnotu v závislosti na grafu Helm

  3. chyba v syntaxi mysql ve vb.net

  4. html/php/sql formulář s insert/update