2011-11-10 8 views
0

Spring JDBCを使用してSybaseデータベース(ASE 15)上のいくつかのレガシーストアドプロシージャを呼び出そうとしています。Sybaseでストアドプロシージャを正しく呼び出す方法

私はかなりうまく動いていますが、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 
     } 
    } 
} 

は、ストアドプロシージャは非常に重要ではありませんが、更新を行い、常に私はいくつかのDBツールを使用して、同じクエリを実行する場合、私は正しく0を得る0を返します。 。

更新が機能し、テーブルが変更された場合、戻り値は3です。私にとっては完全にランダムに見えます。

これは正しい方法ですか?私は行方不明のものがありますか?

Sybaseの独自のドライバjConnect 7を使用しています。

ありがとうございました。

答えて

0

私自身の質問に答える。

私は実際にそれを正しく行っていました。私をだましたのは、から別のツールの戻り値が間違っていたことです。私はそれを考えなかったし、それは本当に意味をなさない。

とにかく...私のアプローチはうまくいくようです。

0

私が妥当かどうかを知るためには春によく慣れていませんが、変更するとどうなりますかsetFunctionfalseに変更しますか?関数とストアドプロシージャは2つの異なる動物ですが、Springがそれらを区別しているかどうかはわかりません。

+0

私はMySQLでより多くの機能を持っていますが、関数とprocsは非常に異なっていますが、sybaseではすべてのprocsが値を返すことができ、機能があるかどうかもわかりません。私はSybaseと同じだと思います。 とにかく、setFuncation(false)を指定すると戻り値はまったくありません。 –

関連する問題