0

Oracle PL/SQL を使用しており、テーブルに ID を持つクライアントがあるかどうかを確認する必要があります。(はい、もしくは、いいえ)。テーブルにクエリを実行すると、この ID を持つ行が に返されv_klientます。たとえば、私のテーブルには番号 2 の ID がありません。しかし、「データが見つかりません」というエラーが発生するため、これを比較することはできません。ifこのエラーをスキップしてステートメントと比較し、必要なアクションを実行する必要があります。

DECLARE
    id_kl_original  NUMBER := 2; // this ID
    v_klient klients%rowtype; // Variable for query return
BEGIN
SELECT *
  INTO  v_klient
    FROM klients
      WHERE id_klient=id_kl_original; // query

IF (v_klient IS NULL) THEN
     DBMS_OUTPUT.put_line(' There's no clients with this ID.');
     /* SOME ACTIONS*/
ELSE
    DBMS_OUTPUT.put_line(v_klient.id_klient);
    /* SOME ACTIONS*/
END IF;

END;
4

3 に答える 3

4

この方法で試すことができます:

DECLARE
    id_kl_original  NUMBER := 2; // this ID
    v_klient klients%rowtype; // Variable for query return
BEGIN
   BEGIN
      SELECT *
      INTO  v_klient
      FROM klients
      WHERE id_klient=id_kl_original; // query

      DBMS_OUTPUT.put_line(v_klient.id_klient);
      /* SOME ACTIONS*/
   EXCEPTION WHEN NO_DATA_FOUND
     DBMS_OUTPUT.put_line(' There's no clients with this ID.');
     /* SOME ACTIONS*/
   END;
   /* REST OF PROCEDURE */
END;
于 2013-11-04T12:20:20.537 に答える
0

これはうまくいきます:

DECLARE
    id_kl_original  NUMBER := 2; // this ID
    i NUMBER; // Variable for query return
BEGIN
SELECT count(*)
  INTO i
    FROM klients
      WHERE id_klient=id_kl_original; // query

IF (i = 0) THEN
     DBMS_OUTPUT.put_line(' There are no clients with this ID.');
     /* SOME ACTIONS*/
ELSE
    DBMS_OUTPUT.put_line(v_klient.id_klient);
    /* SOME ACTIONS*/
END IF;

END;
于 2013-11-04T12:14:22.480 に答える
0

no_data_found 例外を使用すると、最初にクエリを実行して行数をフェッチしてから、再度実行して実際に行をフェッチするよりもクリーンです。

DECLARE
    id_kl_original  NUMBER := 2; -- this ID
    v_klient klients%rowtype; -- Variable for query return
    v_has_data := true;
BEGIN

    BEGIN
        SELECT *
          INTO  v_klient
            FROM klients
              WHERE id_klient = id_kl_original; -- query
    EXCEPTION
        WHEN NO_DATA_FOUND THEN 
            v_has_data := FALSE; 
    END;

    IF v_has_data = FALSE THEN
         DBMS_OUTPUT.put_line('There''s no clients with this ID.');
         /* SOME ACTIONS */
    ELSE
        DBMS_OUTPUT.put_line(v_klient.id_klient);
        /* SOME ACTIONS*/
    END IF;

END;
于 2013-11-04T12:23:38.863 に答える