java - 错误代码[17041];索引::1 处缺少 IN 或 OUT 参数;嵌套异常是 java.sql.SQLException: 在索引::1 处缺少 IN 或 OUT 参数

标签 java spring-jdbc

程序参数:

procedure get_user_profile (
    i_attuid in  ras_user.attuid%type,
    i_data_group in data_group_tbl,
    o_user_info_tbl out user_info_tbl,
    o_service_tbl out service_tbl,
    o_user_role_tbl out user_role_tbl,
    o_permission_tbl out permission_tbl,
    o_work_group_tbl out work_group_tbl,
    o_business_domain_tbl out business_domain_tbl,
    o_skill_tbl out skill_tbl,
    retnum               out number
)

Java 代码:

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.setResultsMapCaseInsensitive(true);

String procedureName = "{call get_user_profile(?,?,?,?,?,?,?,?,?,?)}";
SimpleJdbcCall simpleJdbcCall =
     new SimpleJdbcCall(jdbcTemplate).withCatalogName("ras_user_profile_pkg").withProcedureName(procedureName).declareParameters(
        new SqlParameter("i_ATTUID", Types.VARCHAR),
        new SqlParameter("I_DATA_GROUP", Types.ARRAY),
        new SqlOutParameter("O_USER_INFO_TBL", Types.ARRAY),
        new SqlOutParameter("O_SERVICE_TBL", Types.ARRAY),
        new SqlOutParameter("O_USER_ROLE_TBL", Types.ARRAY),
        new SqlOutParameter("O_PERMISSION_TBL", Types.ARRAY),
        new SqlOutParameter("O_WORK_GROUP_TBL", Types.ARRAY),
        new SqlOutParameter("O_BUSINESS_DOMAIN_TBL", Types.ARRAY),
        new SqlOutParameter("O_SKILL_TBL", Types.ARRAY),
        new SqlOutParameter("retnum", Types.NUMERIC));

dataGroup = new ArrayList<String>();

Map<String, Object> hm = new HashMap<String, Object>();
hm.put("i_ATTUID", attuid);
hm.put("I_DATA_GROUP", dataGroup.toArray());
hm.put("O_USER_INFO_TBL", Types.ARRAY);
hm.put("O_SERVICE_TBL", Types.ARRAY);
hm.put("O_USER_ROLE_TBL", Types.ARRAY);
hm.put("O_PERMISSION_TBL",Types.ARRAY);
hm.put("O_WORK_GROUP_TBL", Types.ARRAY);
hm.put("O_BUSINESS_DOMAIN_TBL", Types.ARRAY);
hm.put("O_SKILL_TBL", Types.ARRAY);
hm.put("retnum", Types.NUMERIC);

SqlParameterSource in = new MapSqlParameterSource().addValues(hm);

Map simpleJdbcCallResult = simpleJdbcCall.execute(in);

请在这里帮助我(我是新来的两个),为什么我收到此错误:

SQL state [99999]; error code [17041]; Missing IN or OUT parameter at index:: 1; nested exception is java.sql.SQLException: Missing IN or OUT parameter at index:: 1

最佳答案

您应该设置过程的名称,而不是调用过程的指令:

String procedureName = "get_user_profile";

关于java - 错误代码[17041];索引::1 处缺少 IN 或 OUT 参数;嵌套异常是 java.sql.SQLException: 在索引::1 处缺少 IN 或 OUT 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33373474/

相关文章:

Java源码哈希表

java - 为什么jstack无法获取Java进程进程的threadump?

java - SimpleJdbcCall 不能调用多个程序

java - 在 Spring Boot 中使用两个数据源

java - 如何在不使用 CrudRepository 的情况下让 java spring boot 应用程序中定义的实体反射(reflect)在数据库中

java - 字符串为最新日期,不符合

java - 如何要求用户输入控制台(BufferedReader)并显示倒计时?需要在两个线程中完成

java - 如何使用SCP将文件内容直接从本地流对象推送到远程文件到远程文件

java - 使用 springframework SimpleJdbcCall 捕获 RAISE_APPLICATION_ERROR

spring-boot - Spring Boot “Hikari Pool Shutdown”早期错误