# `getModuleChildrenPro` (procedure) > 获取模块的子模块 - **Type:** PROCEDURE - **Deterministic:** NO - **SQL data access:** CONTAINS SQL ## Parameters | # | Mode | Name | Type | |---|---|---|---| | 1 | IN | `sbid` | `varchar(255)` | | 2 | IN | `ssid` | `varchar(255)` | | 3 | IN | `p_pSid` | `varchar(255)` | | 4 | IN | `p_key` | `varchar(255)` | | 5 | IN | `treeNode` | `longtext` | | 6 | OUT | `newTreeNode` | `longtext` | | 7 | IN | `sHandModeType` | `varchar(255)` | ## Body _Body is not pre-cached. To inspect: `mysql --defaults-file=~/.my.cnf -e 'SHOW CREATE PROCEDURE `getModuleChildrenPro`'`._ ## Narrative **Business context:** 系统管理 / 模块树 — recursive child-builder used by `getModuleTreePro`. Walks one level of `gdsmodule.sParentId = p_pSid` and emits each child as a JSON-like tree node, appending sub-trees inline via self-recursion (`SET @@max_sp_recursion_depth = 10`). **What it does:** Cursors over the children of `p_pSid` for the given brand/subsidiary in `iOrder` order. For each row emits `{sName, iOrder, sAllId, sParentId, key, sUserType, isLeaf, sId, showName, children:[...]}`, where `key` is built as `CONCAT(p_key, '-', m.sId)` so each node carries its full path. When a child has further descendants (`isLeaf='true'`), the proc calls itself with the new key. The accumulated `treeNode` is returned in the OUT parameter `newTreeNode`. **Invocation:** Called only by `getModuleTreePro` and recursively by itself. Not exposed directly to Java — `getModuleTreePro` is the public entry point invoked via `GdsmoduleMapper.getModuleTreePro` and `MenuServiceImpl.getModuleTreePro()`.