3

嗨,我正在使用 spring jdbctemplate 来调用一个接受整数输入的 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;

我有一个从 Class StoredProcedure 扩展的 Java 类,它传递和整数参数来调用 oracle 函数,如下所示。

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 函数时的顺序相同。IE:

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