【发布时间】:2020-08-10 17:54:17
【问题描述】:
我从 Spring Data JPA 调用存储过程:
程序是:
create or replace procedure GET_LATEST_GC (arg1 IN VARCHAR2, res1 OUT VARCHAR2, res2 OUT VARCHAR2)
AS
BEGIN
DELETE FROM GC_T WHERE id = arg1;
COMMIT;
BEGIN
SELECT gc.NAME, s.SIP INTO res1, res2
FROM GC_T gc, STAFF_T s WHERE s.id = gc.id
AND START_TIME = (SELECT MAX(START_TIME) FROM GC_T);
EXCEPTION
WHEN others THEN
res1 := '';
END;
END;
Spring Data JPA 代码
//存储库
public interface ActiveDao extends JpaRepository<GcT,Integer> {
@Procedure(procedureName="GET_LATEST_GC")
Object[] plus1(@Param("arg1") String arg1);
}
//实体
@Data
@Entity
@NamedStoredProcedureQuery(name = "GET_LATEST_GC",
procedureName = "GET_LATEST_GC", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "arg1", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "res1", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "res2", type = String.class)})
@Table(schema = "abc", name = "GC_T")
public class GcT implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String name;
}
//调用
Object[] activeGCInfo =activeDao.plus1(arg);
程序接受一个参数,我也传递了 1 个参数。然后我也收到此错误:
休眠:{调用 GET_LATEST_GC(?,?)} 错误 ohejdbc.spi.SqlExceptionHelper - ORA-06550:第 1 行,第 7 列:\nPLS-00306:调用“GET_LATEST_GC”时参数的数量或类型错误\nORA-06550:第 1 行,第 7 列:\nPL/SQL : 语句被忽略\n
请让我知道我哪里做错了。 谢谢
更新 - 也根据建议尝试添加 OUT 参数
//Repo
public interface ActiveDao extends JpaRepository<GcT,Integer> {
@Procedure(procedureName="GET_LATEST_GC")
Object[] plus1(@Param("arg1") String arg1,@Param("res1") String res1,@Param("res2") String res2);
}
//Call
Object[] activeGCInfo =activeDao.plus1(arg,"","");
我正在发送三个参数,但它显示我有 4 个参数错误:
休眠:{call GET_LATEST_GC(?,?,?,?)} SqlExceptionHelper - ORA-06550:第 1 行,第 7 列:\nPLS-00306:错误的数量或类型 调用“GET_LATEST_GC”的参数\nORA-06550:第 1 行,第 1 列 7:\nPL/SQL: 语句被忽略\n
【问题讨论】:
-
尝试为参数设置相同的名称 (arg1 != arg)
-
对不起,打错字了。在代码中,它只是一样。
标签: oracle stored-procedures spring-data-jpa