APEX_COLLECTION.CREATE_COLLECTION外部执行失败:ORA-06501错误求助
ORA-06501错误:APEX_COLLECTION在SQL Developer外部执行失败但Apex内部正常的解决方法
问题描述
在SQL Developer中调试调用APEX_COLLECTION的test123函数时,创建集合触发EXCEPTION_ORA_6501错误。该代码在Oracle Apex内部调用正常,但外部直接执行失败。
函数代码
create or replace NONEDITIONABLE function test123 return number is coll_name varchar2(20) := 'mycollection123'; begin if APEX_COLLECTION.COLLECTION_EXISTS(p_collection_name => coll_name) then APEX_COLLECTION.DELETE_COLLECTION(p_collection_name => coll_name); End if; APEX_COLLECTION.CREATE_COLLECTION(p_collection_name => coll_name); return 0; end;
错误堆栈信息
Connecting to the database SYS AT XEPDB1. Executing PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '127.0.0.1', '23364' ) Debugger accepted connection from database on port 23364. Source breakpoint: TEST123.pls:7 Source breakpoint: TEST123.pls:8 Exception breakpoint: WWV_FLOW_COLLECTION_INT.pls:-1, $Oracle.EXCEPTION_ORA_6501, ORA-06501: PL/SQL: program error ORA-06512: at "APEX_230100.WWV_FLOW_COLLECTION_INT", line 99 ORA-06512: at "APEX_230100.WWV_FLOW_COLLECTION", line 53 ORA-06512: at "APEX_230100.WWV_FLOW_COLLECTION", line 365 ORA-06512: at "SYS.TEST123", line 8 ORA-06512: at line 5 Executing PL/SQL: CALL DBMS_DEBUG_JDWP.DISCONNECT() Process exited. Disconnecting from the database SYS AT XEPDB1. Debugger disconnected from database.
解决方法
核心原因
APEX_COLLECTION依赖Oracle Apex的会话上下文环境,在Apex外部(如SQL Developer直接执行)时,未初始化Apex运行所需的会话信息,导致内部逻辑因缺失上下文抛出PL/SQL程序错误。
具体修复步骤
初始化Apex会话上下文
在调用test123函数前,先通过APEX_UTIL.INITIALIZE_USER_SESSION初始化会话环境,示例代码如下:BEGIN APEX_UTIL.INITIALIZE_USER_SESSION( p_user => 'YOUR_DB_USERNAME', -- 替换为实际数据库用户名 p_page_id => 1 -- 任意有效Apex页面ID,无需实际存在 ); DBMS_OUTPUT.PUT_LINE(test123()); END; /避免使用SYS用户执行
SYS作为数据库超级用户,Apex内部逻辑对其有访问限制,建议使用普通的Apex工作区用户进行调试和执行。清理会话资源(可选)
若需重复测试,可在执行完成后调用APEX_UTIL.END_USER_SESSION清理会话资源:BEGIN APEX_UTIL.END_USER_SESSION; END; /
内容的提问来源于stack exchange,提问作者bjan
相关产品推荐
相关产品推荐

