Вызов хранимой процедуры SQL с использованием метода rows () в Grails? - PullRequest
0 голосов
/ 02 ноября 2010

Я работаю в ранее существовавшем проекте grails, в который встроены некоторые функции поиска. Он создал новый объект Sql, используя мой источник данных SQL Server, и похоже, что он пытается вызвать хранимую процедуру следующим образом:

def qResults = sql.rows(spCall)

где spCall является строкой и выглядит следующим образом:

EmployeeQueryClient 'SomeClient', 1,1,0

Где "EmployeeQueryClient" - это имя хранимой процедуры, а остальные - параметры.

Я не могу найти какую-либо документацию, подтверждающую такого рода вызовы - это правильно? Как бы я действительно сделал это, если это не так?

1 Ответ

2 голосов
/ 02 ноября 2010

В приведенном выше коде sql является экземпляром groovy.sql.Sql . Это обеспечивает метод rows(String sql), который можно использовать для выполнения SQL, и возвращает результат.

Вообще говоря, я думаю, что этот метод rows является плохим выбором, если вы хотите вызвать сохраненный процесс, потому что вам нужно объединить имя процесса и все аргументы в одну строку, что является плохой идеей с точки зрения безопасности типов и читабельности.

Вместо этого используйте один из методов перегрузки call, предоставляемых тем же классом, которые специально предназначены для вызова хранимых процедур. Например, если вы просто хотите вызвать процедуру (игнорируя все результаты, которые она возвращает), используйте:

sql.call("{call EmployeeQueryClient(?, ?, ?, ?)}", ['SomeClient', 1, 1, 0])

Синтаксис, используемый здесь для вызова хранимого процесса,

{позвонить в PROC_NAME (PROC_ARGS)}

будет работать для MySql. Если вы не используете MySql, вам нужно заменить его на то, что используется вашей СУБД для вызова хранимого процесса.

Перегруженные версии метода call позволяют обрабатывать любые возвращенные результаты и / или выходные параметры сохраненного процесса.

...