[英]How add OUT parameter to function in Java JDBC (Oracle database)
[英]Java named parameter's name (for Oracle JDBC function result)
我打算调用一个函数,并按名称设置一些参数,例如:
Connection c = null;
ResultSet rs = null;
String query;
PreparedStatement ps;
CallableStatement cs = null;
try {
c = DbUtils.getConnection();
cs = c.prepareCall("{? = call get_proc_name(?, ?) }");
cs.registerOutParameter(1, OracleTypes.VARCHAR);
cs.setInt("in_proc_type", ProcTypes.SELECT);
cs.setLong("in_table_id", tableId);
// here I should use something like cs.registerOutParameter("result", OracleTypes.VARCHAR);
cs.execute();
PL / SQL函数参数是:
CREATE OR REPLACE FUNCTION get_proc_name
(
in_proc_type IN NUMBER, /*1 - insert, 2 - update, 3 - delete, 4 - select*/
in_table_name IN VARCHAR2 := NULL,
in_table_id IN NUMBER := NULL,
in_table_type_id IN NUMBER := NULL,
is_new IN NUMBER := 0
) RETURN VARCHAR2
问题是如何将结果作为out参数注册,然后从oracle获取到java? 我可以按名称注册/输出参数,因为我从函数中知道了他们的名字,但我不知道如何获取函数结果,变量名用于什么。
手册仅描述了程序中的使用输入/输出参数,而不是函数。
Oracle版本:11.1.0.6.0 Java版本:1.6.0_14
解决方案是仅使用设置参数的索引。 这样的代码按预期工作(混合索引和命名参数不起作用;因此,使用命名参数的结果变量的问题无法解决,imho):
c = DbUtils.getConnection();
cs = c.prepareCall("{? = call get_proc_name(in_proc_type => ?, in_table_id => ?) }");
cs.registerOutParameter(1, java.sql.Types.VARCHAR);
cs.setInt(2, ProcTypes.SELECT);
cs.setLong(3, tableId);
cs.execute();
String procName = cs.getString(1);
cs.close();
CallableStatement
有一堆带索引的registerXXX
方法。
这就是你注册结果的方式。 参数编号为1。
在你的情况下,
cs.registerOutParameter( 1, java.sql.Types.VARCHAR);
<思索>
顺便说一句,因为您使用索引作为result
,您可能需要使用面向索引的setXXX
方法并提供完整的参数列表。
</思索>
您将功能结果注册为第一个参数。 显然,这改变了实际参数的编号。
您现有的生产线
cs.registerOutParameter(1, OracleTypes.VARCHAR);
只需要一切。 通话结束后,得到如下结果:
String result = cs.getString(1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.