文档详情

Java中调用存储过程或存储函数的方法.doc

发布:2017-07-20约3.71千字共3页下载文档
文本预览下载声明
1.调用存储过程: CallableStatement clstmt = null; try { clstmt = conn.prepareCall({call package_name.procedure_name(?,?,?,?,?)}); clstmt.setString(1, bill.getBillType()); clstmt.setString(2, bill.getId()); clstmt.setInt(3, bill.getNum()); clstmt.registerOutParameter(4, Types.CHAR); clstmt.registerOutParameter(5, Types.VARCHAR); clstmt.execute(); out_opresult = clstmt.getString(4).trim(); out_operror = clstmt.getString(5).trim(); } catch (SQLException e) { System.out.println(e.getMessage()); } 2.调用存储函数: CallableStatement clstmt = null; try { clstmt = conn.prepareCall({? = call package_name.function_name(?,?,?,?)}); clstmt.registerOutParameter(1, Types.VARCHAR); clstmt.setString(2, bill.getBillType()); clstmt.setString(3, bill.getId()); clstmt.registerOutParameter(4, Types.CHAR); clstmt.registerOutParameter(5, Types.VARCHAR); clstmt.execute(); out_opresult = clstmt.getString(4).trim(); out_operror = clstmt.getString(5).trim(); } catch (SQLException e) { System.out.println(e.getMessage()); } * 存储过程编写时应注意: 1.输出参数不能作为查询条件; eg: 假设,out_id已赋值, SELECT name INTO out_name FROM tb_test WHERE id = out_id; 这样写PL/SQL中会正常通过,而在Java程序调用该存储过程时会报错,需要改成: v_id CHAR(8) := ; 先对v_id赋值, SELECT name INTO out_name FROM tb_test WHERE id = v_id; 这样PL/SQL和Java程序中都可正常通过和调用。 2.如存储过程中带有Date、Boolean型参数,Java程序调用时会出错, 报类型不匹配,目前只能不用Date、Boolean型作为存储过程参数, 可能的原因:JDBC不支持。。。 测试程序如下: 存储函数如下: FUNCTION my_test(in_test1 IN CHAR, in_test2 IN BOOLEAN, out_test3 OUT VARCHAR) RETURN VARCHAR IS v_test CHAR(3) := ; BEGIN select aaa into v_test from dual; Return OK; EXCEPTION WHEN OTHERS THEN out_test3 := SQLCODE; Return SQLCODE; END; Java代码如下: try { clstmt = conn.prepareCall({? = call my_test(?,?
显示全部
相似文档