如何从过程所在的弹簧数据 JPA 调用存储过程过程



如何从 spring 数据 JPA 调用存储过程过程,其中过程等于

CREATE OR REPLACE PROCEDURE ERPDEV.INTG_TO_TRAN_PROC AS IN_USER_ID NUMBER;
IN_USER_DEVICE_ID                                                NUMBER;
IN_IN_DATE                                                       DATE;
IN_IN_TIME                                                       DATE;
IN_OUT_TIME                                                      DATE;
IN_DIFF_TIME                                                     NUMBER;
IN_USER_DEVICE_LOCATION                                          VARCHAR2(25);
IN_FLOOR_TIME                                                    NUMBER;
BEGIN FOR REC1 IN (SELECT
C.USER_ID,
C.USER_DEVICE_ID
FROM USER_DEVICE_MAP C) LOOP IN_USER_ID := REC1.USER_ID;
IN_USER_DEVICE_ID := REC1.USER_DEVICE_ID;
IN_FLOOR_TIME := 0;
FOR REC IN (SELECT
B.DEVICE_ID,
B.USER_DEVICE_ID,
B.USER_DEVICE_LOCATION,
B.IN_DATE,
B.IN_TIME,
B.OUT_TIME
FROM BIOMETRIC_INTEGRATION B
WHERE B.USER_DEVICE_ID = IN_USER_DEVICE_ID AND B.IN_DATE = TO_DATE(SYSDATE)
ORDER BY B.DEVICE_ID) LOOP IN_USER_DEVICE_LOCATION := REC.USER_DEVICE_LOCATION;
IN_IN_TIME := REC.IN_TIME;
IN_OUT_TIME := REC.OUT_TIME;
IN_IN_DATE := REC.IN_DATE;
IN_DIFF_TIME := 0;
IN_DIFF_TIME := (IN_OUT_TIME - IN_IN_TIME) * 24;
IN_FLOOR_TIME := IN_FLOOR_TIME + IN_DIFF_TIME;
END LOOP;
INSERT INTO BIOMETRIC_TRANSACTION (TRAN_ID, USER_ID, USER_DEVICE_ID, USER_DEVICE_LOCATION, IN_DATE, FIRST_IN_TIME, LAST_OUT_TIME, TOTAL_TIME_ON_FLOOR)
VALUES
(BIO_TRAN_SEQ.NEXTVAL, IN_USER_ID, IN_USER_DEVICE_ID, IN_USER_DEVICE_LOCATION, IN_IN_DATE, (SELECT MIN(IN_TIME)
                            FROM
                              BIOMETRIC_INTEGRATION
                            WHERE USER_DEVICE_ID =
                                  IN_USER_DEVICE_ID),
(SELECT MAX(OUT_TIME)
FROM BIOMETRIC_INTEGRATION
WHERE USER_DEVICE_ID = IN_USER_DEVICE_ID), ROUND(IN_FLOOR_TIME, 2));
END LOOP;
COMMIT;
END;

尝试如下:

实体类

@Entity
@NamedStoredProcedureQuery(name = "User.plus1", procedureName = "plus1inout", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "res", type = Integer.class) 
})
public class User {}

存储库方法应该像

@Procedure("plus1inout")
Integer explicitlyNamedPlus1inout(Integer arg);

最新更新