MySQL function:
DELIMITER $$
USE `test`$$
DROP FUNCTION IF EXISTS `getTreeChildList`$$
CREATE DEFINER=`test`@`%` FUNCTION `getTreeChildList`(rootId VARCHAR(40)) RETURNS VARCHAR(5000)
BEGIN
DECLARE sTemp VARCHAR(5000);
DECLARE sTempChd VARCHAR(5000);
SET sTemp = '';
SET sTempChd = rootId;
WHILE sTempChd IS NOT NULL DO
SET sTemp = CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(CODE) INTO sTempChd FROM P_EVALUATE_STRUCTURE WHERE FIND_IN_SET(parent,sTempChd)>0;
END WHILE;
RETURN sTemp;
END$$
DELIMITER ;
Java
@Autowired
private JdbcTemplate jdbcTemplate;
public List<JSONObject> getCallDefinedFunctionSQL(String sysCode){
final String callFunctionSql = "{?= call getTreeChildList(?)}";
final String inputStr = sysCode;
List<SqlParameter> params = new ArrayList<SqlParameter>();
params.add(new SqlOutParameter("result", Types.LONGVARCHAR));
params.add(new SqlParameter("str", Types.VARCHAR));
Map<String, Object> outValues = jdbcTemplate.call(
new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement(Connection conn) throws SQLException {
CallableStatement callableStatement = conn.prepareCall(callFunctionSql);
callableStatement.registerOutParameter(1, Types.LONGVARCHAR);
callableStatement.setString(2, inputStr);
return callableStatement;
}}, params);
System.out.println(outValues.get("result"));