2010-11-02 7 views
0

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

def qResults = sql.rows(spCall) 

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

EmployeeQueryClient 'SomeClient', 1,1,0 

Где «EmployeeQueryClient это имя хранимой процедуры, и другие вещи, которые являются параметрами

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

ответ

2

В приведенном выше коде 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 позволяют обрабатывать любые возвращаемые результаты и/или вывести параметры хранимой процедуры.

Смежные вопросы