sql >> データベース >  >> RDS >> Oracle

SELECTにsql%rowcountを使用することは可能ですか?

    はい、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;
    


    1. データベースへの直接ストリーミング

    2. Webページ内でセッションを使用する方法は?

    3. OracleのVARCHAR(MAX)とVARCHAR(n)

    4. 2つ(またはそれ以上)の行名を持つクロス集計