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

Er det muligt at bruge sql%rowcount til SELECT?

Ja, du kan bruge SQL%ROWCOUNT . Det er gyldigt i PL/SQL.

Men i PL/SQL skal resultatet af din forespørgsel hen et sted, f.eks. ind i en PL/SQL-tabel. PL/SQL sender aldrig resultatet til output (terminal, vindue osv.). Så SELECT * FROM virker ikke.

Din kode kunne se sådan ud:

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

Opdater :

De opdaterede spørgsmål tyder på, at du leder efter noget andet.

Mulighed 1:Brug undtagelser

Hvis der er 0 rækker eller mere end 1 række, håndteres disse sager separat (som fejl):

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;

Mulighed 2:Brug sammenlægninger

Ved at bruge aggregeringer vil forespørgslen altid returnere præcis én række. Hvis nu kilderækken matchede WHERE-udtrykket, vil begge resultatværdier være NULL. Hvis der WHERE-sætning matchede mere end én række, tages maksimum.

Bemærk, at denne forespørgsel muligvis returnerer et portnummer og en IP-adresse, der oprindeligt ikke var på samme række.

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;

Mulighed 3:Brug ROWNUM

Denne forespørgsel returnerer højst én række. Hvis ingen række matcher WHERE-sætningen, er der en undtagelse, som skal håndteres:

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. Heroku - ActionView::Skabelon::Fejl (PG::Fejl:FEJL:kolonnekategori_produkter.desc eksisterer ikke

  2. Hvordan kan jeg tvinge værdien af ​​en MySQL-forespørgsel til at bruge en bestemt sortering?

  3. ORACLE SQL Group Ved STADIG at give dubletter

  4. Opret en bruger med alle rettigheder i Oracle