Одна из вещей, которая раздражает меня при работе с SQL на языках OO, - это необходимость определять операторы SQL в строках.
Когда я работал на мейнфреймах IBM, языки использовали препроцессор SQL для синтаксического анализа операторов SQL из собственного кода, поэтому операторы могли быть записаны в открытом тексте SQL без запутывания строк, например, в Cobol есть EXEC SQL .... END-EXEC синтаксическая конструкция, которая позволяет операторам чистого SQL быть встроенными в коде Cobol.
<pure cobol code, including assignment of value
to local variable HOSTVARIABLE>
EXEC SQL
SELECT COL_A, COL_B, COL_C
INTO :COLA, :COLB, :COLC
FROM TAB_A
WHERE COL_D = :HOSTVARIABLE
END_EXEC
<more cobol code, variables COLA, COLB, COLC have been set>
... это делает оператор SQL действительно простым для чтения и проверки на наличие ошибок. Между токенами EXEC SQL .... END-EXEC нет ограничений на отступы, разрывы строк и т. Д., Поэтому вы можете форматировать оператор SQL по своему вкусу.
Обратите внимание, что этот пример предназначен для выбора из одной строки, когда ожидается набор результатов из нескольких строк, кодировка отличается (но все еще v. Легко читается).
Итак, на примере Java
Что сделало нежелательным подход «старый КОБОЛ» ? При таком подходе не только SQL, но и системные вызовы могут быть намного более читабельными. Давайте назовем это встроенным препроцессором иностранного языка .
Было бы полезно реализовать встроенный препроцессор иностранного языка для SQL? Видите ли вы выгоду в том, что сможете писать нативные операторы SQL внутри Java-кода?
Редактировать
Я действительно спрашиваю, думаете ли вы, что SQL в ОО-языках - это возврат, и если нет, то что можно сделать, чтобы сделать его лучше.