如何通过ORDS替代EPG发布生成网页的PL/SQL存储过程?
如何通过ORDS发布生成HTML的PL/SQL存储过程(替代EPG)
针对Oracle 12.1数据库,要发布依赖htp、htf、owa包生成HTML内容的PL/SQL存储过程,无需REST/JSON模式,可按以下步骤操作:
1. 启用目标模式的ORDS访问
首先为存储过程所在的模式(示例中的ww2b_scan)启用ORDS支持:
BEGIN ORDS.ENABLE_SCHEMA( p_enabled => TRUE, p_schema => 'WW2B_SCAN', p_url_mapping_type => 'BASE_PATH', p_url_mapping_pattern => 'ww2b_scan', p_auto_rest_auth => FALSE ); COMMIT; END; /
p_url_mapping_pattern对应ORDS路径中的模式映射部分(即示例链接里的/ords/ww2b_scan/),可自定义。p_auto_rest_auth设为FALSE,保持和EPG类似的无认证访问(需认证可调整)。
2. 将存储过程发布为ORDS处理程序
由于该存储过程生成HTML而非JSON/REST响应,需创建PL/SQL类型的处理程序并指定响应类型:
BEGIN ORDS.CREATE_PROCEDURE( p_module_name => 'scan_html_procs', -- 自定义模块名,用于归类相关过程 p_pattern => 'scan_menu', -- 对应URL中的过程路径(示例里的`/scan_menu`) p_procedure_name => 'SCAN_MENU', -- 数据库中的存储过程名 p_source_type => 'PL/SQL', p_mime_type => 'text/html', -- 关键:指定响应为HTML类型 p_arguments => 'p_mi_id:INTEGER' -- 存储过程参数,格式为`参数名:类型` ); COMMIT; END; /
- 多参数用逗号分隔,例如
p_arg1:VARCHAR2,p_arg2:NUMBER。 p_module_name用于管理同一类处理程序,后续可通过该名称维护。
3. 验证访问
完成配置后,即可通过示例格式的ORDS链接访问:http://192.168.50.7:19090/ords/ww2b_scan/scan_menu?p_mi_id=104888
ORDS会调用目标存储过程,将htp/htf生成的HTML内容直接返回客户端,行为与EPG一致。
4. 额外配置(可选)
- 若需限制访问,可通过
ORDS.CREATE_ROLE和ORDS.ADD_ROLE_TO_MODULE为处理程序添加认证规则。 - 存储过程依赖
owa包会话状态(如owa_util)时,ORDS会自动维护会话上下文,与EPG兼容。
原EPG实现说明
原EPG通过DAD(示例中的scan)映射到模式,调用存储过程时直接输出htp生成的内容。ORDS逻辑类似,但通过PL/SQL API配置,无需修改HTTP服务器的DAD配置,更灵活易维护。
内容的提问来源于stack exchange,提问作者dipr




