簡體   English   中英

如何在Sybase中正確調用存儲過程

[英]How to call stored procedures in Sybase correctly

我試圖使用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。

謝謝。

我對Spring不夠熟悉,無法知道我是否正確,但是如果將setFunction更改為false會發生什么呢? 函數和存儲過程是兩種不同的動物,但是我不知道Spring是否區分它們。

回答我自己的問題。

我實際上是做對了。 愚弄我的是另一個工具的返回值是錯誤的。 我從沒想過,這真的沒有道理。

無論如何...似乎我的方法可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM