14

「WHERE」句内に「IF」ステートメントを含むクエリを使用しています。しかし、PL\SQL Developer は実行中にいくつかのエラーを出しています。誰でも正しいクエリを手伝ってもらえますか? クエリは次のとおりです。

SELECT t.first_name,
       t.last_name,
       t.employid,
       t.status
  FROM employeetable t
 WHERE IF status_flag = STATUS_ACTIVE then t.status = 'A'
       IF status_flag = STATUS_INACTIVE then t.status = 'T'
       IF source_flag = SOURCE_FUNCTION then t.business_unit = 'production'
       IF source_flag = SOURCE_USER then t.business_unit = 'users'
   AND t.first_name LIKE firstname
   AND t.last_name LIKE lastname
   AND t.employid LIKE employeeid;

「ORA-00920: 関係演算子が無効です」というエラーが表示されます。

括弧で囲むstatus_flag = STATUS_ACTIVEと、「ORA-00907: 右括弧がありません」というエラーが発生します

4

2 に答える 2

16

CASEがあなたを助けるかもしれません:

SELECT t.first_name,
       t.last_name,
       t.employid,
       t.status
  FROM employeetable t
 WHERE t.status = (CASE WHEN status_flag = STATUS_ACTIVE THEN 'A'
                        WHEN status_flag = STATUS_INACTIVE THEN 'T'
                        ELSE null END)
   AND t.business_unit = (CASE WHEN source_flag = SOURCE_FUNCTION THEN 'production'
                               WHEN source_flag = SOURCE_USER THEN 'users'
                               ELSE null END)
   AND t.first_name LIKE firstname
   AND t.last_name LIKE lastname
   AND t.employid LIKE employeeid;

CASE ステートメントは、複数の条件を評価して 1 つの値を生成します。したがって、最初の使用法では、status_flag の値をチェックし、その値に応じて「A」、「T」、または null を返し、それを t.status と比較します。2 番目の CASE ステートメントを使用して、business_unit 列に対して同じことを行います。

于 2013-03-14T00:26:10.117 に答える