BaseStoredProcedure используется более чем 200 классами вызова процедур. В класс BaseStoredProcedure сложно вносить изменения.
Теперь у нас есть входной параметр, имеющий значение по умолчанию в конце базы данных. Мы должны иметь возможность совершать вызов с обязательным параметром и позволять параметрам по умолчанию работать со значением по умолчанию. Но мы не можем этого сделать. Получение ошибки, как показано ниже
Код: Выделить всё
ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call
Примечание: мы не можем заменить эту реализацию на SimpleJdbcCall, поскольку это увеличит регрессионное тестирование.
Ниже приведен лишь пример, а не наш общий класс BaseStoredProcedure. Итак, если у меня есть еще один входной параметр, для которого в БД установлено значение по умолчанию, как вызвать его из Java, не объявляя и не устанавливая здесь. Извините, я не могу опубликовать реальный код.
Код: Выделить всё
class BaseStoredProcedure extends StoredProcedure{
public BaseStoredProcedure(DataSource dataSource, String procedureName){
super(dataSource,procedureName);
declareParameter(new SqlParameter("in_id", Types.INTEGER));
//declareParameter(new SqlParameter("in_total_subject", Types.INTEGER)); // parameter with some default value in Database, which I need to avoid declaring here
declareParameter(new SqlOutParameter("out_name", Types.VARCHAR));
declareParameter(new SqlOutParameter("out_age", Types.INTEGER));
compile();
}
public Student execute(Integer id){
Map out = super.execute(id /* ,7 */);// additionally, another parameter, which have default value in Database. Which I need to avoid setting
Student student = new Student();
student.setId(id);
student.setName((String) out.get("out_name"));
student.setAge((Integer) out.get("out_age"));
return student;
}
}
Код: Выделить всё
PROCEDURE studentdetail
(
@in_id int
,@in_total_subject int = 7,
// Output parameters here
)
Подробнее здесь: https://stackoverflow.com/questions/784 ... ith-option