大佬教程收集整理的这篇文章主要介绍了grails调用存储过程(调用的时候call不能少了那个一对大括号{},少了调用结果不对),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
sql MysqL = new sql(datasource_lookup)
def =MysqL.call("{Call test2(?)}",['650203199106272111'])
存储过程:
CREATE OR replaCE
PROCEDURE "test2"(sfid VARCHAR2) AS
v_sf_id T_BASE.SF_ID%type;
BEGIN
SELECT sf_id into v_sf_id from T_BASE where SF_ID=sfid;
-- routIne body goes here, e.g.
DBMS_OUTPUT.PUT_LINE('Navicat for Oracleaaaa'||v_sf_id);
END;
有一个问题最好把那个过程名的双引号去掉不然有时候会报错
带输入的存储过程:
sql MysqL = new sql(datasource_lookup)
def ret
MysqL.call("{Call test2(?,?)}",['650203199106272111',MysqL.VARCHAR]){ret=it}
println "ret:>"+ret
CREATE OR replaCE
PROCEDURE test2(sfid VARCHAR2,names OUT VARCHAR2) AS
v_sf_id T_BASE.SF_ID%type;
BEGIN
SELECT sf_id into NAMEs from T_BASE where SF_ID=sfid;
-- routIne body goes here, e.g.
--DBMS_OUTPUT.PUT_LINE('Navicat for Oracleaaaa'||v_sf_id);
END;
带输入输出的游标存储过程:
返回集合的存储过程要用游标,而且要用带包的存储过程
包:
CREATE OR replaCE
PACKAGE grails_package AS
type grailsReture is ref cursor;
/* TODO enter package declarations (types, exceptions, methods etC) here */
end grails_package;
过程:
CREATE OR replaCE
PROCEDURE grails_pak (sex IN VARCHAR2, grails_cursor OUT grails_package.grailsReturE)
AS
BEGIN
open grails_cursor for SELEct * from T_BASE where SEX=sex;
-- routIne body goes here, e.g.
-- DBMS_OUTPUT.PUT_LINE('Navicat for Oracle');
END;
Grails 调用:
Def datasource
sql MysqL = new sql(datasource_lookup)
def ret
MysqL.call("{Call grails_pak(?,['男',MysqL.resultSet(OracleTypes.cursOR)]){CarModel ->
//这里不能打印 carModel 会报错(message: org.apache.commons.dbcp.DelegaTingCallableStatement with //address: "Oracle.jdbc.driver.OracleCallableStatementWrapper@1a1280c" is closed.)
println"car style: ${x.sf_iD},car series: ${x.namE},car type: ${x.sj}"
} }
以上是大佬教程为你收集整理的grails调用存储过程(调用的时候call不能少了那个一对大括号{},少了调用结果不对)全部内容,希望文章能够帮你解决grails调用存储过程(调用的时候call不能少了那个一对大括号{},少了调用结果不对)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。