Я должен генерировать PL / SQL с помощью Java. Большинство процедур являются общими. Лишь немногие постоянно меняются. Как это сделать? - PullRequest
1 голос
/ 13 ноября 2009

Мне нужно сгенерировать код PL-SQL, с некоторым общим кодом (неизменяемым) и кодом переменной. Я не хочу использовать какие-либо внешние инструменты.

Некоторые способы, которыми я могу думать:

  • Могу ли я пойти и сохранить общий код в шаблоне и с маркерами, где мой код Java будет генерировать код в маркерах и генерировать новый файл.

  • Поддержание общего кода в статической константе String, а затем генерация всего кода в StringBuffer и, наконец, запись в файл.

Но я совсем не удовлетворен обеими идеями. Можете ли вы предложить какие-либо лучшие способы сделать это или использовать какие-либо шаблоны проектирования или что-нибудь?

Заранее спасибо.

Ответы [ 5 ]

1 голос
/ 10 апреля 2012

Вы можете взглянуть на SQLind , этот API предоставляет способ хранения сценариев SQL или PL / SQL во внешнем XML-файле, позволяя использовать некоторые шаблонные функции (включая подстановку ...).

1 голос
/ 13 ноября 2009

Вы можете использовать шаблонизатор, например FreeMarker или Velocity. Хранить шаблоны в простой Java не очень хорошая идея.

1 голос
/ 13 ноября 2009

IMO, вы должны хранить свои шаблоны в файлах и использовать шаблонизатор для заполнения переменных частей. Я также хотел бы рассмотреть возможность использования JDBC для прямой генерации пакетов pl / sql (функций, процедур и т. Д.) Непосредственно из вашей программы.

0 голосов
/ 13 ноября 2009

Возможный подход может состоять в том, чтобы смоделировать шаблон SQL (предпочтительно) во внешнем ресурсе (txt-файл или тому подобное), но обернуть его и представить его остальной части вашей системы в виде PLSQLTemplate (для отсутствия лучшего имени) учебный класс. Затем вы можете использовать один из двух подходов при разработке этого класса:

  1. Шаблонный шаблон. Предполагая, что вы заранее знаете, какой будет «переменная» часть запроса, вы можете использовать шаблон Template Method, расширяющий класс PLSQLTemplate и реализующий набор абстрактных методов «variable provider» для возврата специфики запроса. (Вид подхода шаблонов JDBC).

  2. Фабричный шаблон (вид). Превратите PLSQLTemplate в фабрику «SQL». Вы можете опубликовать общедоступный API для класса, чтобы вы могли вызывать методы «setter» в экземпляре, чтобы установить переменные части кода, и иметь фабричный метод, который возвращает для вас PreparedStatement, который упаковывает ваш теперь завершенный SQL. Предпочтительным подходом здесь будет создание экземпляра PLSQLTemplate с «переменными», передаваемыми в конструктор, для обеспечения согласованного состояния объекта. Это будет зависеть от того, сколько частей переменных вам нужно установить в операторе SQL, поскольку вам, вероятно, не нужна действительно широкая сигнатура конструктора.

Надеюсь, это поможет.

0 голосов
/ 13 ноября 2009

Сложность ваших требований к замене немного расплывчата, но если ваше решение должно использовать Java (что на самом деле не самый лучший инструмент для этой цели), то предложенные вами подходы разумны. Использование файла шаблона может быть предпочтительнее, поскольку оно позволяет программистам, не являющимся Java, обновлять шаблон PL-SQL более просто.

Стоит учесть, что если вы используете ant в качестве инструмента для сборки, выполните подстановку с помощью Ant, см. Тип filterset .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...