Ввиду обстоятельств, не зависящих от нас (другими словами, с помощью кода, написанного сторонней организацией), нам необходимо переписать операторы SQL со встроенными значениями в подготовленные операторы.Прямо сейчас мы используем ужасный набор регулярных выражений, которые улавливают большинство случаев, но все еще терпят неудачу в некоторых (и вообще ужасно терпят неудачу, производя неправильный SQL).
Похоже, нам нужнона самом деле разбираем SQL, подставляя "?"параметры для явных строковых и числовых значений и сбор значений для внедрения в новый подготовленный оператор.
- Кто-нибудь уже сделал это?
- Если вы этого не сделали, но использовали один из анализаторов Java SQL, вы бы порекомендовали этот анализатор для этой цели?
Вот пример типа «хайер» SQL, с которым мы имеем дело и который хотел бы переписать:
rewrite from
SELECT COL1 FROM TB1 WHERE LOWER(COL2) = LOWER('foo bar ' || '&' || ' Abc(' || '''' || ')')
AND COL3 = 2 AND COL4 = 1
to
SELECT COL1 FROM TB1 WHERE LOWER(COL2) = LOWER(? || ? || ? || ? || ?)
AND COL3 = ? AND COL4 = ?
applied to ("foo bar ", "&", " Abc(", "'", ")", 2, 1)