はい、SQL%ROWCOUNT
を使用できます 。 PL/SQLで有効です。
ただし、PL / SQLでは、クエリの結果はどこかに移動する必要があります。 PL/SQL表に。 PL/SQLが結果を出力に送信することはありません。 (ターミナル、ウィンドウなど)。したがって、SELECT * FROM
動作しません。
コードは次のようになります:
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;
/
更新 :
更新された質問は、あなたが何か他のものを探していることを示唆しています。
オプション1:例外を使用する
0行または複数行がある場合、これらのケースは個別に(エラーとして)処理されます:
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;
オプション2:集計を使用する
集計を使用すると、クエリは常に正確に1行を返します。ソース行がWHERE句と一致した場合、両方の結果値はNULLになります。 WHERE句が複数の行に一致する場合は、最大値が使用されます。
このクエリは、元々同じ行になかったポート番号とIPアドレスを返す可能性があることに注意してください。
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;
オプション3:ROWNUMを使用する
このクエリは最大で1行を返します。 WHERE句に一致する行がない場合、例外がスローされ、処理する必要があります:
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;