JFinal 调用 Oracle 存储过程/函数,具体步骤如下:
数据库连接定义
String oracleUrl = "jdbc:oracle:thin:@127.0.0.1:1521/xxx";
DruidPlugin oraclePlugin = new DruidPlugin(oracleUrl, "name", "pwd");
oraclePlugin.setDriverClass("oracle.jdbc.OracleDriver");
oraclePlugin.start();
ActiveRecordPlugin oracleArp = new ActiveRecordPlugin("oracle",oraclePlugin);
oracleArp.setDialect(new OracleDialect());
oracleArp.start();
Oracle 函数定义,我这里只放出定义:
function f_GetSpecialPriceSale
(
RESULT_SALE out sys_refcursor,
Goods in varchar2,
SaleDate in Date,
MSG out varchar2
)
return integer;
JFinal 调用该函数的部分代码如下
Db.use("oracle").execute((conn) -> {
CallableStatement stmt = conn.prepareCall("{ ? = call f_GetSpecialPriceSale(?, ?, ?, ?) }");
stmt.registerOutParameter(1, OracleTypes.INTEGER);
stmt.registerOutParameter(2, OracleTypes.CURSOR);
stmt.setString(3, joiner.toString());
stmt.setDate(4, DateUtil.parse(specialDate).toSqlDate());
stmt.registerOutParameter(5,OracleTypes.NVARCHAR);
stmt.execute();
int returnValue = stmt.getInt(1);
ResultSet resultSet = (ResultSet) stmt.getObject(2);
String msg = stmt.getString(5);
// 处理结果集
while (resultSet.next()) {
// 从结果集中获取数据
}
return stmt;
});