如何通过SQL查询获取Oracle Apex应用中的所有导航菜单列表?
获取Oracle Apex应用已使用的导航菜单列表的SQL查询方案
要查询指定Oracle Apex应用中所有已使用的导航菜单,你可以利用Apex内置的元数据表apex_application_navigation_menu_entries,结合你已经用到的apex_application_pages来关联页面信息。以下是几种实用的查询方案:
1. 完整导航菜单条目及关联页面信息
这个查询会返回所有菜单条目,包括对应的页面名称、ID,以及菜单的结构顺序:
SELECT n.menu_name, n.entry_name, n.entry_sequence, n.entry_link, p.page_name, p.page_id, n.entry_type FROM apex_application_navigation_menu_entries n LEFT JOIN apex_application_pages p ON n.application_id = p.application_id AND n.entry_target LIKE '%f?p=' || p.application_id || ':' || p.page_id || '%' WHERE n.application_id = 25459 ORDER BY n.menu_name, n.entry_sequence;
apex_application_navigation_menu_entries:存储应用所有导航菜单条目的核心元数据表,包含菜单名称、条目名称、链接目标、显示顺序等字段- LEFT JOIN关联
apex_application_pages:通过页面链接的标准格式f?p=APP_ID:PAGE_ID:...匹配菜单条目对应的页面信息 - 过滤条件
n.application_id = 25459:指定你要查询的应用ID
2. 带层级结构的导航菜单查询
如果需要区分父菜单和子菜单的层级关系,可以加入parent_entry_id字段:
SELECT n.menu_name, n.parent_entry_id, n.entry_name, n.entry_sequence, n.entry_link, p.page_name, p.page_id, n.entry_type FROM apex_application_navigation_menu_entries n LEFT JOIN apex_application_pages p ON n.application_id = p.application_id AND n.entry_target LIKE '%f?p=' || p.application_id || ':' || p.page_id || '%' WHERE n.application_id = 25459 ORDER BY n.menu_name, n.parent_entry_id NULLS FIRST, n.entry_sequence;
parent_entry_id:为空时表示该条目是父菜单,非空时对应子菜单所属的父条目ID,NULLS FIRST确保父菜单排在子菜单之前
3. 仅查询已关联到页面的菜单条目
如果只需要那些实际链接到应用内页面的菜单条目,可以将LEFT JOIN改为INNER JOIN,并去重:
SELECT DISTINCT n.menu_name, n.entry_name, p.page_name, p.page_id FROM apex_application_navigation_menu_entries n INNER JOIN apex_application_pages p ON n.application_id = p.application_id AND n.entry_target LIKE '%f?p=' || p.application_id || ':' || p.page_id || '%' WHERE n.application_id = 25459 ORDER BY n.menu_name, n.entry_name;
内容的提问来源于stack exchange,提问作者Retal Omar
相关产品推荐
相关产品推荐

