Как выполнять функции в запросах к базе данных gstring для groovy - PullRequest
0 голосов
/ 10 марта 2010

Я надеюсь использовать Groovy в качестве функционального языка больше, чем я могу с Java, но одна область, которая кажется проблемой, - это когда я вызываю хранимую процедуру, поскольку я передаю, возможно, 40 параметров за один вызов, но мне также нужно выполнить подготовительную работу, даже до того, как я позвоню.

Так, например, мне нужна временная метка, чтобы у меня было что-то похожее (поэтому могут быть ошибки, но это концепция, к которой я стремлюсь)

def timestamp = (int) (Calendar.instance.timeInMillis/1000)
def ismanager = input.isManager ? 1 : 0
sql.call("{call myfunction($timestamp, ..., $ismanager, ..."})

Было бы полезно, если бы я мог выполнять вызовы такого типа внутри запроса, так как в этом случае было бы больше смысла в том, что происходит, поскольку в хранимой процедуре так много параметров, что приходится искать, что произошло. инициализация ise manager может быть проблематичной.

Есть ли способ выполнить эти функции в вызове gstring?

1 Ответ

2 голосов
/ 10 марта 2010

Вы можете сделать это, вставив их в строку следующим образом:

sql.call("{call myfunction(${(int) (Calendar.instance.timeInMillis/1000)}, 
                          ..., ${input.isManager ? 1 : 0}, ...}")

тогда, так как SQL должен игнорировать разрывы строк, если не в середине слова (я не очень хорошо это помню), вы можете использовать тройные двойные экранированные строки (какое мощное имя):

"""call myfunction${(int) (Calendar.instance.timeInMillis/1000)}
..., ${input.isManager ? 1 : 0}, ...}"""

не раздражая себя длинной строкой.

...