【问题标题】:How to call stored procedures in Sybase correctly如何在 Sybase 中正确调用存储过程
【发布时间】:2011-11-10 14:17:11
【问题描述】:

我正在尝试使用 Spring JDBC 在 Sybase 数据库 (ASE 15) 上调用一些遗留存储过程。

我已经让它工作得很好,但我不知道如何从 proc 中获取返回值。

这是我得到的代码:

@Repository
public class SybaseDao extends StoredProcedure {
    private static final String SQL = "db..proc_name";
    private static final String RETURN_VALUE = "rc";
    private static final String IN_DATA = "in_data";

    @Autowired
    public UpdateSybaseDao(DataSource dataSource) {
        super(dataSource, SQL);
        setFunction(true);
        declareParameter(new SqlOutParameter(RETURN_VALUE, NUMERIC));
        declareParameter(new SqlParameter(IN_DATA, NUMERIC));
        compile();
    }

    public void update(Integer inData) {
        Map<String, Object> inputs = new HashMap<String, Object>();
        inputs.put(IN_DATA, inData);
        Map<String, Object> results = execute(inputs);

        Integer returnValue = (Integer) results.get(RETURN_VALUE);
        if (returnValue > 0) {
            // handle this error
        }
    }
}

存储过程不是很重要,但它会进行更新并始终返回 0。如果我使用一些 db 工具运行相同的查询,我会正确得到 0。

更新有效,表已更改,返回值为 3。对我来说,这看起来完全是随机的。

我这样做是否正确?我有什么遗漏吗?

如果重要的话,我正在使用 Sybase 的专有驱动程序 jConnect 7。

谢谢。

【问题讨论】:

    标签: java spring sap-ase atomikos jconnect


    【解决方案1】:

    我对 Spring 不够熟悉,不知道我是否正确,但是如果将 setFunction 更改为 false 会发生什么?函数和存储过程是两种不同的动物,但我不知道Spring是否区分它们。

    【讨论】:

    • 我更熟悉 MySQL,函数和过程非常不同,但在 sybase 中,我认为所有过程都可以返回值,我什至不确定是否有函数。我认为在 Sybase 中也是如此。无论如何,使用 setFunction(false) 根本没有返回值。
    【解决方案2】:

    回答我自己的问题。

    事实上,我做得对。愚弄我的是 another 工具的返回值是错误的。我从来没想过,这真的没有意义。

    无论如何...看来我的方法有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多