我要求调用存储过程来获取数据,这里我将通过post数据获取存储过程名称。
我尝试使用GString但没有用,任何人都可以帮我解决这个问题。
提前致谢。
答案 0 :(得分:0)
这是一个奇怪的,但可能。 Grails / GORM不提供执行存储过程的方法。它不是ORM功能的一部分。 Hibernate也没有。但是,Hibernate确实提供了对JDBC连接的访问。所以你可以从Hibernate获得连接,然后用连接创建一个Groovy Sql实例,最后执行你的存储过程。这是一个例子:
import groovy.sql.Sql
SomeDomainClass.withNewSession { session ->
session.doWork { java.sql.Connection connection ->
def sql = new Sql(connection)
sql.call("YOUR STORED PROCEDURE SQL HERE")
}
}
它的工作原理如下:
withSession(Closure)
以获取Hibernate会话。doWork(Work)
以访问会话的JDBC连接。现在,doWork(Work)
期望实现 org.hibernate.jdbc.Work 。但是,如果我没记错的话,Groovy可以使用相同的参数进行闭包并强制它来实现接口。Sql.call()
方法执行存储过程。答案 1 :(得分:0)
对于那些在Grails 3中使用此方法时没有现有会话的人,您需要将SomeDomainClass.withSession
替换为SomeDomainClass.withNewSession
。
感谢Emmanuel的回答,为我们节省了大量时间!还有杜尔加要求我们确切需要的东西!
(我目前没有足够的声誉发表评论,但这是对Emmanuel在此提交的答案的评论)
答案 2 :(得分:0)
在Postgress SQL中,可以调用存储过程。捕获返回一个数据表,以便您可以将其映射到模型。如下所示。
let stringResult = stringTask.Result
unitTask.Wait()
可以在GORM数据库连接中按以下方式调用
create function activate(confirmationcode text)
returns TABLE(resultid integer, resultmessage character varying)
language plpgsql
as $$
BEGIN
....
END