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

行が存在するかどうかを確認する

    このバージョンでは:

     SELECT COUNT(*) INTO isFound FROM MyTable WHERE USERNAME =userName AND ROWNUM =1;  

    ... テーブルの USERNAME 列はそれ自体と比較されるため、常に一致します。それをローカル変数と比較していません。これを行うには、変数に列に別の名前を付ける必要があります:

    isFound NUMBER を宣言します。 localUserName VARCHAR2(30);begin isFound :=0;ユーザー名:='aaaaaa'; SELECT COUNT(*) INTO isFound FROM MyTable WHERE USERNAME =localUserName AND ROWNUM =1; IF isFound> 0 THEN dbms_output.put_line('見つかった'); ELSE dbms_output.put_line('見つかりません'); END IF;終了;  

    または、David Aldridge が提案するように、ラベルを使用してローカル変数をテーブル列から区別します。

    <>isFound NUMBER を宣言します。 userName MyTable.USERNAME%TYPE;begin isFound :=0;ユーザー名:='aaaaaa'; SELECT COUNT(*) INTO isFound FROM MyTable WHERE USERNAME =local.userName AND ROWNUM =1;...  

    名前付きブロックでもそのアプローチを使用できます。これが関数内にある場合は、ローカル変数を function_name.variable_name として参照できます .これは無名ブロックなので、ラベルは function_name と同じ役割を果たします

    ドキュメントには、名前解決に関するセクション があります。 .



    1. フィールドへの外部キーのリファクタリング

    2. SQL Serverのカスタム集計関数(連結)

    3. SQL正規表現の最後の文字検索が機能しない

    4. エラーをforallplsqlにキャッチする方法