「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:右括弧がありません」が発生します
ケースはあなたを助けるかもしれません:
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ステートメント は、複数の条件を評価して単一の値を生成します。そのため、最初の使用では、status_flagの値をチェックし、値に応じて「A」、「T」、またはnullを返し、それをt.statusと比較します。 2番目のCASEステートメントを使用して、business_unit列にも同じことを行います。
そのようなIFは使用できません。 ANDおよびORを使用して、必要な処理を実行できます。
SELECT t.first_name,
t.last_name,
t.employid,
t.status
FROM employeetable t
WHERE ((status_flag = STATUS_ACTIVE AND t.status = 'A')
OR (status_flag = STATUS_INACTIVE AND t.status = 'T')
OR (source_flag = SOURCE_FUNCTION AND t.business_unit = 'production')
OR (source_flag = SOURCE_USER AND t.business_unit = 'users'))
AND t.first_name LIKE firstname
AND t.last_name LIKE lastname
AND t.employid LIKE employeeid;