演算子を引数として受け入れる各列に関数を記述します。このようにして、演算子は、オペランド自体と同様にバインド変数を介して供給することができます。ただし、オプティマイザは述語の選択性を非常にうまく計算できないため、パフォーマンスの問題が発生する可能性があります。
パフォーマンスの問題のために
SELECT company, accounts
FROM testdrive AS t
WHERE company_is(t.company,'&CompanyOp','&Company')
AND date_is(t.date_created,'&CreatedOp',TO_DATE('&Created','DD/MM/YYYY'))
ORDER BY company DESC
をしかし、気を付ける - あなたは、通常の方法でいくつかの他の述部を指定することができない限り、あなたはつもりだが、何も見えません。
FUNCTION company_is (company IN VARCHAR2, op IN VARCHAR2, value IN VARCHAR2) IS
BEGIN
RETURN CASE op
WHEN '=' THEN (company = value)
WHEN 'LIKE' THEN (company LIKE value)
WHEN '<' THEN (company < value)
...
END;
END;
FUNCTION date_is (thedate IN DATE, op IN VARCHAR2, value IN DATE) IS
BEGIN
RETURN CASE op
WHEN '=' THEN (thedate = value)
WHEN '<' THEN (thedate < value)
...
END;
END;
次に、あなたは、このように述語を供給することができますフルスキャン!
これは、移動する方法の1つになる可能性があります。 SQL * PLusでは、&代入変数を使用して文の一部を確実に提供できます。また、TOADも同じことをしています。 –