Вызов процедуры Oracle со списком объектов Java, как в параметре из весенней загрузки - PullRequest
0 голосов
/ 01 мая 2019

Таким образом, у нас есть требование, при котором нам нужно вызывать хранимую процедуру Oracle, передавая пользовательский список Java-объекта, как в параметре с использованием весенней загрузки, я провел некоторое исследование и не смог получить надлежащую реализацию, новичок при весенней загрузке. так что любая помощь и реализация справки очень помогли бы.

Что нам нужно сделать, так это создать микросервис, который будет извлекать некоторые записи из преобразования dong монго и затем загружать их в dB Oracle, но вызовом будет хранимая процедура Oracle, мы смогли выполнить всю часть mongo и Соединение с Oracle и вызов хранимой процедуры Oracle с простым параметром in, но наше требование состоит в том, чтобы вызвать эту хранимую процедуру, передав список типов объектов Java. Вот где мы застряли

1 Ответ

0 голосов
/ 02 мая 2019

1) Создание класса bean-компонента Config базы данных, в котором вы можете хранить все связанные с базой данных (Oracle) свойства

DatabaseConfigClass

@Configuration
public class DataBaseConfig {
  private static final Log LOGGER = LogFactory.getLog(DataBaseConfig.class);
  @Autowired
  private Environment environment;
  @Bean(name = "jdbcTemplate")
  public JdbcTemplate jdbcTemplate() throws SQLException {
  OracleDataSource dataSource = new OracleDataSource();

  String url = environment.getProperty("spring.db.jdbc.url");
  String userName = environment.getProperty("spring.db.username");
  String password = environment.getProperty("spring.db.password");
  String driver = environment.getProperty("spring.db.driver-classname");

  dataSource.setUser(userName);
  dataSource.setPassword(password);
  dataSource.setURL(url);
  dataSource.setDriverType(driver);
  return new JdbcTemplate(dataSource);
   }
 }

2) Существует многоспособы вызова хранимой процедуры.Один из лучших способов - использовать простой вызов jdbc

ServiceClass

public class getOrders(ApprovalAction approvalActionObj){

  List<Orders> orderList= approvalActionObj.getApprovalQsType();

  SimpleJdbcCall jdbcCall = new 
  SimpleJdbcCall(jdbcTemplate).withProcedureName("XX_PROCEDURE")
 .withCatalogName("XX_PACKAGE").withoutProcedureColumnMetaDataAccess()
 .declareParameters(
  new SqlParameter("P_ORDER_ROLLUP", Types.ARRAY,"ALG_ORDER_TAB"),
  new SqlOutParameter("O_ERROR_MESSAGE", Types.NUMBER));


  Object[][] orderArray = new Object[ordersList.size()][2];   

  for(int actionIndex = 0; actionIndex < ordersList.size(); actionIndex++) 
  {

  ordersArray[actionIndex][0] = orderList.get(actionIndex).getId();
  ordersArray[actionIndex][1] = orderList.get(actionIndex).getType();
  }
  Map<String, Object> orderResult=jdbcCall.execute(new 
  MapSqlParameterSource().addValue("P_ORDER_ROLLUP", new 
  SqlArrayValue(orderArray)));

  Integer errorMsg = (String) orderResult.get("O_ERROR_MESSAGE"); 
  }

Примечание: В вашем случае вы можете передать все пользовательские объектыкак массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...