Возврат результирующего набора с использованием simpleJdbcCall - ошибка грамматики SQL - PullRequest
0 голосов
/ 29 июня 2018

В настоящее время я тестирую Spring Framework как новый способ обработки наших соединений. Я нахожусь в процессе тестирования вызова функции, которая возвращает REF-курсор от simpleJdbcCall. Модульный тест, который я запускаю, продолжает выдавать исключение BadSqlGrammarException, и я не уверен, откуда возникла проблема, поскольку я новичок в весну.

Вот код:

@Autowired
private SimpleJdbcCall simpleJdbcCall;
private final String schema_name = "xxlt";
private final String procedure_catalog = "xxlt_bpg_std_width_pkg";
private final String procedure_name    = "get_std_rods";

public List<StandardRods> getDefaultRodMatAndColor(String series, String style, String material, String color)
{
    simpleJdbcCall.withSchemaName(schema_name).withCatalogName(procedure_catalog).withProcedureName(procedure_name).useInParameterNames("p_series_ind", "p_style_ind", "p_material_ind", "p_color_ind")
    .returningResultSet("lref", BeanPropertyRowMapper.newInstance(StandardRods.class));

    MapSqlParameterSource paramMap = new MapSqlParameterSource();

    paramMap.addValue("p_series_ind", series, Types.VARCHAR);
    paramMap.addValue("p_style_ind", style, Types.VARCHAR);
    paramMap.addValue("p_material_ind", material, Types.VARCHAR);
    paramMap.addValue("p_color_ind", color, Types.VARCHAR);
    Map m = simpleJdbcCall.execute(paramMap);
    return (List) m.get("lref");

Процедура:

FUNCTION get_std_rods (p_series_ind IN varchar2, p_style_ind IN varchar2, p_material_ind IN varchar2, p_color_ind IN varchar2)
return SYS_REFCURSOR IS lref SYS_REFCURSOR;
BEGIN
  OPEN lref FOR
    SELECT bbv.default_rod_mat, bbv.default_rod_color
    FROM xxlt.xxlt_bpg_belt_val bbv
    WHERE bbv.series_ind = p_series_ind AND
          bbv.belt_style_ind = p_style_ind AND
          bbv.material_ind = p_material_ind AND
          bbv.color_ind = p_color_ind;
  RETURN lr

Ошибка:

PLS-00306: wrong number or types of arguments in call to 'GET_STD_RODS'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

1 Ответ

0 голосов
/ 03 июля 2018

Вам необходимо добавить свои параметры в своем выражении с двоеточием, чтобы система знала, куда вводить значения, которые вы определили в paramMap:

FUNCTION get_std_rods (:p_series_ind IN varchar2, :p_style_ind IN varchar2, 
p_material_ind IN varchar2, :p_color_ind IN varchar2)
return SYS_REFCURSOR IS lref SYS_REFCURSOR;
BEGIN
OPEN lref FOR
SELECT bbv.default_rod_mat, bbv.default_rod_color
FROM xxlt.xxlt_bpg_belt_val bbv
WHERE bbv.series_ind = :p_series_ind AND
      bbv.belt_style_ind = :p_style_ind AND
      bbv.material_ind = :p_material_ind AND
      bbv.color_ind = :p_color_ind;
RETURN lr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...