2010-12-20 114 views
1
  1. 如何使用Groovy調用存儲過程?
  2. 如何從Grails項目創建存儲過程(作爲創建數據庫的域類)?

回答

2

調用FullName存儲過程的一個示例,它接受一個參數(示例中爲'Sam')並返回一個VARCHAR。

sql.call("{? = call FullName(?)}", [Sql.VARCHAR, 'Sam']) { name -> 
    assert name == 'Sam Pullara' 
} 

同樣的例子再次但具有GString的變化:

def first = 'Sam' 
sql.call("{$Sql.VARCHAR = call FullName($first)}") { name -> 
    assert name == 'Sam Pullara' 
} 

這裏是用out參數的存儲過程的例子:

sql.call '{call Hemisphere(?, ?, ?)}', ['Guillaume', 'Laforge', Sql.VARCHAR], { dwells -> 
    println dwells // => Northern Hemisphere 
} 

參見this

+0

我嘗試這些方法,但我仍然有一個錯誤:沒有方法的簽名:靜態groovy.sql.Sql.call()適用於參數類型:(java.lang.String,java.util.ArrayList,vltrafficmonitor。 CDRController $ _closure3_closure4)values:[{call call endpoint_stats_get(?,?,?,?)},[1,Mon Dec 20 09:44:00 EET 2010,Mon Dec 20 09:44:00 EET 2010,Sql。% ROWTYPE],[email protected]] – 2010-12-20 08:20:48

+0

可能的解決方案:call(java.lang.String),call(java.lang.String,[Ljava.lang.Object;),call(java.lang.String,java .util.List),調用(java.lang.String,java.util.List,groovy.lang.Closure),調用(groovy.lang.GString),調用(groovy.lang.GString,groovy.lang.Closure) – 2010-12-20 08:22:03

+0

我建議你添加一個.toString()到GStrings,因爲sql.call不接受GStrings – sbglasius 2010-12-21 14:27:46