使用grails中的rows()方法调用sql存储过程?

时间:2010-11-02 15:39:33

标签: sql stored-procedures grails groovy

我正在以前存在的grails项目中工作,该项目内置了一些搜索功能。它使用我的SQL Server数据源创建了一个新的Sql对象,似乎它试图像这样调用一个存储过程:

def qResults = sql.rows(spCall)

其中spCall是一个String,如下所示:

EmployeeQueryClient 'SomeClient', 1,1,0

其中“EmployeeQueryClient是存储过程的名称,其他内容是参数。

我找不到任何支持此类通话的文件 - 这是正确的吗?如果不是这样,我该怎么做?

1 个答案:

答案 0 :(得分:2)

在上面显示的代码中,sqlgroovy.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方法的重载版本使您能够处理返回的任何结果和/或存储过程的输出参数。