我正在以前存在的grails项目中工作,该项目内置了一些搜索功能。它使用我的SQL Server数据源创建了一个新的Sql对象,似乎它试图像这样调用一个存储过程:
def qResults = sql.rows(spCall)
其中spCall是一个String,如下所示:
EmployeeQueryClient 'SomeClient', 1,1,0
其中“EmployeeQueryClient是存储过程的名称,其他内容是参数。
我找不到任何支持此类通话的文件 - 这是正确的吗?如果不是这样,我该怎么做?
答案 0 :(得分:2)
在上面显示的代码中,sql
是groovy.sql.Sql的一个实例。这提供了一个rows(String sql)
方法,可用于执行SQL并返回结果。
一般来说,如果你想调用存储过程,我认为这个rows
方法是一个糟糕的选择,因为你必须将proc的名称和所有的args连接成一个字符串,这是一个从类型安全性和可读性的角度来看,这是个坏主意。
而是使用同一个类提供的一个重载call
方法,这些方法专门用于调用存储过程。例如,如果您只想调用该过程(忽略它返回的任何结果),请使用:
sql.call("{call EmployeeQueryClient(?, ?, ?, ?)}", ['SomeClient', 1, 1, 0])
此处用于调用存储过程的语法
{致电PROC_NAME(PROC_ARGS)}
将适用于MySql。如果您没有使用MySql,则需要将其替换为RDBMS用于调用存储过程的任何内容。
call
方法的重载版本使您能够处理返回的任何结果和/或存储过程的输出参数。