Ecrivez une fonction pour chaque colonne qui accepte un opérateur en tant qu'argument. De cette façon, les opérateurs peuvent être fournis via des variables de liaison ainsi que les opérandes eux-mêmes. Cette méthode souffrira probablement de problèmes de performance, car l'optimiseur ne pourra pas très bien calculer la sélectivité des prédicats.
par exemple.
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;
Ensuite, vous pouvez fournir prédicats de cette façon:
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
Mais attention pour les problèmes de performance - à moins que vous pouvez spécifier d'autres prédicats de façon normale, vous allez voir rien des analyses complètes!
Cela pourrait être une solution. Dans SQL * PLus, vous pouvez certainement fournir n'importe quelle partie de la déclaration via les variables & substitution, et je suis sûr que TOAD fait la même chose. –