【问题标题】:How read returned value from stored procedure in Spring Jdbc (without out parameters in procedure)如何从 Spring Jdbc 中的存储过程中读取返回值(过程中没有输出参数)
【发布时间】:2013-10-25 06:11:07
【问题描述】:

如何从 Spring Jdbc 中的存储过程中读取返回值(不带 out 参数)?

我使用的是 Sybase ASE 数据库。

程序示例:

CREATE PROCEDURE dbo.procedureA (
 @a int
)
as
begin
    IF EXISTS (SELECT 1 FROM dbo.T WHERE a = @a)
        return 1
    ELSE
        return -1
end

【问题讨论】:

    标签: java spring stored-procedures sap-ase spring-jdbc


    【解决方案1】:

    参考:http://www.databaseskill.com/1270151/ 关键点是:SimpleJdbcCall.withReturnValue() 指示 SimpleJdbcCall 对象将返回值放入带有键“RETURN_VALUE”的结果映射中。所以你可以像访问它 (整数)simpleJdbcCall.execute().get("RETURN_VALUE")

    对于 Sybase,不需要声明 SqlOutParameter "RETURN_VALUE"

    【讨论】:

    • 根据我使用 PostgreSQL 作为数据库的经验,返回键名称是"returnvalue",但others 提到了另一种可能性,即"return"(不确定是哪个数据库)。可能是映射中存储过程返回值的键会根据使用的数据库而变化。
    【解决方案2】:

    处理此问题的最佳方法是使用 Spring-Jdbc 项目中的SimpleJdbcCall

    使用 SimpleJdbcCall,您可以为此目的声明 in 和 out 参数。

    你可以这样做:

    SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource);
    simpleJdbcCall.withCatalogName("dbo");
    simpleJdbcCall.withProcedureName("procedureA ");
    simpleJdbcCall.setAccessCallParameterMetaData(false);
    simpleJdbcCall.declareParameters(new new SqlOutParameter("a",Types.NUMERIC));
    simpleJdbcCall.execute();
    

    更多信息here

    希望对你有帮助。

    【讨论】:

    • 不,这是程序。 (这只是一个例子,其实我有完整的程序,而且很大,不会重写。)
    【解决方案3】:

    这可能会有所帮助,虽然我自己还没有尝试过;

    http://forum.spring.io/forum/spring-projects/data/114859-return-value-of-stored-procs-using-storedprocedure-class-and-not-simplejdbccall

    public MyStoredProc(JdbcTemplate jdbcTemplate) {
        super(jdbcTemplate, "mystoredproc");
        setFunction(true);
        declareParameter(new SqlOutParameter("Result", Types.NUMERIC));
        declareParameter(new SqlInOutParameter("otherparam1", Types.INTEGER));
        declareParameter(new SqlParameter("otherparam2", Types.INTEGER));
        allowsUnusedParameters();
        compile();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2017-07-24
      • 2021-06-29
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多