既有樹形選單結構,每節點擁有 ID 與父 ID (PID)。給定任一節點 ID,需回傳從根節點到該節點的完整路徑 (如「系統管理 > 使用者管理 > 角色配置」)。
CREATE PROCEDURE SCOTT.CMODM_FUNPATH(
IN FUNID INTEGER,
IN LINK VARCHAR(10),
OUT FUNPATH VARCHAR(200)
)
SPECIFIC SQL071108112056000
READS SQL DATA
NOT DETERMINISTIC
NULL CALL
LANGUAGE SQL
BEGIN
DECLARE curName VARCHAR(30);
DECLARE curFunId INTEGER;
SET FUNPATH = '';
SET curFunId = FUNID;
WHILE (curFunId != 0) DO
SELECT pid, name INTO curFunId, curName
FROM scott.cmodm_function WHERE id = curFunId;
IF (FUNPATH = '') THEN
SET FUNPATH = curName;
ELSE
SET FUNPATH = curName || LINK || FUNPATH;
END IF;
END WHILE;
END
<parameterMap id="funPathMap" class="map">
<parameter property="FUNID" jdbcType="INTEGER" javaType="int" mode="IN"/>
<parameter property="LINK" jdbcType="VARCHAR" javaType="String" mode="IN"/>
<parameter property="FUNPATH" jdbcType="VARCHAR" javaType="String" mode="OUT"/>
</parameterMap>
<procedure id="selectFunPath" parameterMap="funPathMap">
{call scott.cmodm_funpath(?,?,?)}
</procedure>
// Java 呼叫
SqlMapClient sqlMap = getSqlMapClient();
Map param = new HashMap<>();
param.put("FUNID", funId);
param.put("LINK", " > ");
param.put("FUNPATH", "");
sqlMap.queryForObject("selectFunPath", param);
String path = (String) param.get("FUNPATH");
parameterMap 精確映射 IN/OUT 模式,型別安全。