1. ホーム
  2. select

[解決済み] PL/SQLで結果がNULLの場合、どのように変数に選択するのですか?

2023-05-27 06:26:27

質問

クエリが何も返さないかもしれないことを考慮して、変数に選択するために一度だけクエリを実行する方法はありますか、その場合、変数はnullであるべきです。

現在、私は select into クエリが何も返さない場合、PL/SQLは変数が設定されないと文句を言うからです。最初のクエリはカウントを行い、カウントがゼロの場合、変数をヌルに設定し、カウントが1の場合、変数に選択することで、クエリを2回実行することができるだけです。

というわけで、コードは以下のようになります。

v_column my_table.column%TYPE;
v_counter number;
select count(column) into v_counter from my_table where ...;
if (v_counter = 0) then
    v_column := null;
elsif (v_counter = 1) then
    select column into v_column from my_table where ...;
end if;

ありがとうございます。

更新しました。 例外を使わなかった理由は、以下のロジックがまだ残っているからです。 v_column を割り当てた後、次のようなロジックがあり、私は goto を使わないと、次のコードに飛べません。私は、ちょっと躊躇してしまうのですが goto の行はちょっと躊躇します。

どのように解決するのですか?

単純に NO_DATA_FOUND 例外を処理するには、変数に NULL . この方法では、1つのクエリのみが必要となります。

    v_column my_table.column%TYPE;

BEGIN

    BEGIN
      select column into v_column from my_table where ...;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        v_column := NULL;
    END;

    ... use v_column here
END;