2010-11-02 16 views
0

我正在以前存在的Grails項目中工作,該項目中內置了一些搜索功能。它創造了用我的SQL Server數據源新的SQL對象,好像它正試圖調用,像這樣一個存儲過程:使用grails中的rows()方法調用sql存儲過程?

def qResults = sql.rows(spCall) 

其中spCall是一個字符串,看起來像這樣:

EmployeeQueryClient 'SomeClient', 1,1,0 

其中「EmployeeQueryClient是存儲過程的名稱,其他的事情是參數

我無法找到任何文件支持這種調用的 - 這是正確的我怎麼會真正做到這一點,如果它?是不是?

回答

2

在上面顯示的代碼中sqlgroovy.sql.Sql的一個實例。這提供了一個rows(String sql)方法,可用於執行SQL並返回結果。

一般來說,我認爲這rows方法是一個不錯的選擇,如果你想調用一個存儲的過程,因爲你必須將過程的名字和所有的參數連接成一個字符串,這是一個壞主意類型安全性和可讀性的觀點。

改爲使用由同一類提供的過載call方法之一,這些方法專門用於調用存儲過程。例如,如果你只是想調用的程序(忽略它返回任何結果)使用方法:

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

這裏用於調用存儲過程的語法,

{調用proc_name中(PROC_ARGS)}

將適用於MySql。如果您沒有使用MySql,則需要將其替換爲RDBMS用於調用存儲過程的任何內容。

call方法的重載版本使您能夠處理存儲過程的任何返回結果和/或輸出參數。

相關問題