我是 Java 和 PLSQL 新手。我已经在 PLSQL 中构建了这个过程:
PROCEDURE getLogs (
p_idcontract IN NUMBER,
p_iduser IN NUMBER,
o_logs OUT VARCHAR2
)
IS
BEGIN
SELECT logData INTO o_logs
FROM SERVICELOG
WHERE IDCONTRACT= p_idcontract
AND IDUSER= p_iduser;
END getLogs;
如果脚本检测到多行,则向启动它的 Java 类返回此消息:
ORA-01422: exact fetch returns more than requested number of rows
请问,我如何返回一个 HashMap 或类似的,准备好输出到Java?谢谢。
最佳答案
我将使用引用光标作为输出参数,然后在java程序中构建 map 。 https://oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets 您还可以在 Oracle 中定义类似于 Java Array 的用户类型。
PROCEDURE getLogs (
p_idcontract IN NUMBER,
p_iduser IN NUMBER,
p_recordset OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN p_recordset FOR
SELECT logData
FROM SERVICELOG
WHERE IDCONTRACT= p_idcontract
AND IDUSER= p_iduser;
END getLogs;
Java代码:
CallableStatement stmt = conn.prepareCall("BEGIN getLogs(?, ?, ?); END;");
stmt.setInt(1, 0);
stmt.setInt(2, 0);
stmt.registerOutParameter(3, OracleTypes.CURSOR);
stmt.execute();
ResultSet rs = ((OracleCallableStatement)stmt).getCursor(3);
while (rs.next()) {
;
//here build your Map, list or whatever you want
}
关于java - 从 PLSQL 过程获取值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40020954/