3

こんにちは私はspringjdbctemplateを使用して、整数入力を受け取るoracle関数を呼び出しています。

Oracle function is :
    FUNCTION get_key_types (type_id IN integer)
  RETURN tcur_key_types_det
IS 
  lv_cur   tcur_key_types_det;
 BEGIN
  IF type_id IS NULL
  THEN
     RAISE KEY_ERROR;
  ELSE
     OPEN lv_cur FOR
          SELECT   key_criteria_cd,
                   key_type_name,
                   KEY_COLUMN_TXT,
                   data_type_cd
            FROM   key_criteria
           WHERE   criteria_type_id = type_id
        ORDER BY   key_type_name;
  END IF;
RETURN lv_cur;
END get_key_types;

次のように、Oracle関数を呼び出すための整数引数を渡すClassStoredProcedureから拡張されたJavaクラスがあります。

public class KeyTypeService extends StoredProcedure{
public KeyTypeService(DataSource dataSource,String sqlString) {
    setDataSource(dataSource);
    setFunction(true);
    setSql(sqlString);
    declareParameter(new SqlParameter("type_id",Types.INTEGER));
    declareParameter(new SqlOutParameter("functionName",OracleTypes.CURSOR,new KeyTypeMapper()));
    compile();
}

public Map execute(int category_id) {
    Map<String, Object> inputs = new HashMap<String, Object>();
    inputs.put("type_id", category_id);
    Map output = execute(inputs);
    return output;     
}

}

次のようにoracle関数を呼び出します。

int i = 60;
KeyTypeService keyTypeService = new KeyTypeService((DataSource)c.getBean   ("DataSource"),"get_key_types"); 
map = keyTypeService.execute(i);

期待される正しいデータ型を渡していないことを示す次のエラーが表示されます。

PLS-00306:'get_key_types'の呼び出しで引数の数またはタイプが正しくありませんORA-06550:行1、列7:PL / SQL:ステートメントが無視されました

どんな助けでも大歓迎です。

4

1 に答える 1

2

私のコメントは正しかったので:

out パラメータが最初に来る必要があります。

Spring のドキュメントでは順序について明示的に説明されていない場合がありますが、パラメーターの順序は、Spring なしで pl/sql 関数を呼び出す場合と同じ順序にする必要があります。すなわち:

out = call pacakge.function(in)
于 2012-07-03T09:06:16.120 に答える