0

私はステートメントで with を見cursorています。このクエリは、勤続 5 年以上の従業員のレコードを返します。デコードステートメントの意図は、レコードが返されたかどうかを確認することだったと思います(つまり、その従業員は5年以上働いています)。decode(1, 1, 1, NULL, 0)SELECT

このアプローチはうまくいかないようです。間違ったダミーデータを入れているだけかもしれません。私の仮定は正しいですか(このアプローチは機能しません)? 私が間違っている場合、このデコード ステートメントは、レコードが返されたかどうかを識別するという目標をどのように達成しますか?

CURSOR worked_more_then_five_years
IS
SELECT decode(1, 1, 1, NULL, 0)
FROM table
WHERE /*query conditions*/
4

4 に答える 4

1

ステートメントは、返される1decodeつまたは複数の行の戻り値に影響を与えています。

行が返されることを保証するには、集計を使用することをお勧めします。

CURSOR worked_more_then_five_years
IS
SELECT (case when count(*) > 0 then 1 else 0 end)
FROM table
WHERE /*query conditions*/

このcaseステートメントは、 と「同等」の SQL 標準decode()です。集計は常に 1 行を返します。一致するものがない場合、値は 0 です。一致するものがあれば、最初の句が満たされ、戻り値は 1 です。

于 2013-06-04T01:51:28.633 に答える
0

CURSOR working_more_then_five_years IS SELECT デコード(1, 1, 1, NULL, 0) FROM テーブル WHERE /クエリ条件/

Decode の最初のパラメーターは列名でなければなりません。例) SELECT DECODE(WORK_YEAR, '5', WORK_YEAR, NULL) FROM TABLE

このステートメントは、「WORK_YEAR が '5' の場合は '5' を出力する必要があり、WORK_YEAR が '5' でない場合はすべての出力が 'null' である」ことを意味します。

于 2013-06-04T07:07:43.713 に答える