使用Oracle数据库开发,然而go对oracle的连接只能借助go-oci8。现在基本数据库增删改查已经实现,在调用数据库存储函数的时候出现了问题。存储函数包括三个输入值一个输出值,大概格式如下所示:
create or replace function FN_TEST(
-- 'ok' 成功
-- 'false' 失败
Id in varchar2, -- ID
UserId in varchar2, -- 工号
Content in varchar2 -- 意见
) return varchar2 as
Result varchar2(50);
begin
Result := 'false';
-- 具体处理过程
IF ... THEN
Result := 'ok';
END IF;
return(Result);
end FN_TEST;
现在想在go程序中调用该存储函数,写法如下:
stmt, _ := db.Prepare("call FN_TEST(:1,:2,:3)")
_,err := stmt.Exec(Id, UserId, Content)
执行之后提示函数名错误。经网上查找,知道无法用call执行带返回值的函数。使用java语言开发的时候,可以使用CallableStatement函数实现,大概格式如下:
fn = "{?=call FN_TEST(?,?,?)}";
CallableStatement cstmt = con.prepareCall(fn);
cstmt.registerOutParameter(1, Types.VARCHAR);
cstmt.setString(2, id);
cstmt.setString(3, userid);
cstmt.setString(4, content);
cstmt.execute();
想请问在go语言中如何实现这样的调用?感谢各位!
本问题已解决。sql语句按照“SELECT function(param1,param2,...) FROM DUAL”的形式,使用db.QueryRow(sql)来执行,即可获得函数返回值。
#3
更多评论