存储过程和存储函数的定义参考:
https://blog.csdn.net/qq_34721292/article/details/90579498
/**
* java调用存储过程
* {?= call <procedure-name>[(<arg1>,<arg2>, ...)]} 调用存储函数
{call <procedure-name>[(<arg1>,<arg2>, ...)]} 调用存储过程
* @throws Exception
*/
@Test
public void javaCallProcedure() throws Exception {
//加载数据库驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//得到Connection链接
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "hehe", "hehe");
//得到预编译得Statement对象
CallableStatement pstm = connection.prepareCall("{call p_yearsal(?,?)}");
pstm.setObject(1,7788);
pstm.registerOutParameter(2, OracleTypes.NUMBER);
//执行数据库操作
pstm.execute();
//输出结果,第二个参数
System.out.println(pstm.getObject(2));
//释放资源
pstm.close();
connection.close();
}
/**
* java调用存储函数
* {?= call <procedure-name>[(<arg1>,<arg2>, ...)]} 调用存储函数
{call <procedure-name>[(<arg1>,<arg2>, ...)]} 调用存储过程
* @throws Exception
*/
@Test
public void javaCallFunction() throws Exception {
//加载数据库驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//得到Connection链接
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "hehe", "hehe");
//得到预编译得Statement对象
CallableStatement pstm = connection.prepareCall("{?=call f_yearsal(?)}");
pstm.setObject(2,7788);
pstm.registerOutParameter(1, OracleTypes.NUMBER);
//执行数据库操作
pstm.execute();
//输出结果,第二个参数
System.out.println(pstm.getObject(1));
//释放资源
pstm.close();
connection.close();
}