java - 使用 Spring Boot 调用具有两个 INOUT 参数的 oracle 过程
问题描述
我有一个问题,我一直试图解决很长时间,但我找不到解决方案。我有一个带有 2 个返回值的 oracle 程序。
返回值:
p_cur001 IN OUT SYS_REFCURSOR , v_result IN OUT NUMBER
我想从spring中调用这个程序,把两个返回值向上移动到API中。
我怎样才能做到这一点?
还有,如何通过repository中的函数将返回值和参数传递给服务呢?
我所有的相关代码都在下面。
甲骨文程序
CREATE OR REPLACE PACKAGE BODY MET.Z_PKG_OEE_NEW
PROCEDURE Z_OEE_GetActualProducedTonnes_Detail(V_plant_config_num_id IN number, p_start_date in date, p_stop_date in DATE,p_cur001 IN OUT SYS_REFCURSOR, v_result IN OUT NUMBER) IS
BEGIN
v_result:=0;
for p_cur001 in(
SELECT po.actual_weight, po.PIECE_ID, ph.ACTUAL_START
FROM piece po,
piece pi,
piece_history_in phi,
piece_history ph,
piece_history_out pho,
sty_quality sq
WHERE po.plant_config_num_id = V_plant_config_num_id
AND po.piece_num_id = pho.piece_num_id
AND pho.piece_history_num_id = ph.piece_history_num_id
AND ph.status <> 3
AND PH.ACTUAL_STOP BETWEEN p_start_date AND p_stop_date
AND pho.piece_history_num_id = phi.piece_history_num_id
AND phi.piece_num_id = pi.piece_num_id
AND po.quality_num_id = sq.quality_num_id
and po.piece_status_num_id <> 0
AND SUBSTR(po.PIECE_ID, 9,1) <>'R'
AND ((V_plant_config_num_id=18 AND po.PRODUCT_TYPE LIKE 'PP%') OR V_plant_config_num_id<>18 )
)
loop
v_result := v_result + p_cur001.actual_weight/1000;
end loop;
END Z_OEE_GetActualProducedTonnes_Detail;
END;
当前存储库代码:
@Repository
public class OeeDao {
@Autowired
private EntityManager entitymanager;
public List<Object[]> GetActualProducedTonnesDetail(int V_plant_config_num_id,Date p_start_date,Date p_stop_date)
{
StoredProcedureQuery query = entitymanager
.createStoredProcedureQuery("Z_PKG_OEE_NEW.Z_OEE_GetActualProducedTonnes_Detail")
.registerStoredProcedureParameter(
1,
Integer.class,
ParameterMode.IN
) .registerStoredProcedureParameter(
2,
Date.class,
ParameterMode.IN
) .registerStoredProcedureParameter(
3,
Date.class,
ParameterMode.IN
)
.registerStoredProcedureParameter(
4,
Class.class,
ParameterMode.INOUT
).registerStoredProcedureParameter(
5,
BigDecimal.class,
ParameterMode.INOUT
)
.setParameter(1, V_plant_config_num_id).setParameter(2, p_start_date).setParameter(3, p_stop_date).setParameter(4, null).setParameter(5, 0);
query.execute();
List<Object[]> postComments = query.getResultList();
return postComments;
}
}
它给出错误:sys_refcursor 参数不能为空。我知道这一点,但正如我所说,我不知道解决方案。
解决方案
推荐阅读
- c - 对于只有一个叶子节点的每个父亲,删除叶子并将其值与父亲相加
- go - 将去获取命令更新我本地机器中的包
- flutter - 翻译小部件并不顺利
- javascript - ENOTCONN 与 process.stdout 和 process.stderr 的管道
- bash - CD 进入带有非法字符的目录路径,该字符存储在变量中
- java - Java Mail API 路由电子邮件而不修改 FROM 标头
- c# - 如何在代码隐藏中向按钮添加命令
- php - 使用 MySql 和 PHP 将数据分类到一个共同的日期
- php - 每 24 小时生成一个新的 .txt 文件
- file - 在 TCL/PERL 中以表格格式打印