首页 > 解决方案 > 使用 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 参数不能为空。我知道这一点,但正如我所说,我不知道解决方案。

标签: javaspringoraclespring-boothibernate

解决方案


推荐阅读