从PL/SQL访问Oracle Apex应用程序设置



我按照以下说明创建了一个值为bar的顶点应用程序设置FOO

当我尝试从SQL Workshop > SQL Commands页面访问设置时,我看到Requested Application Setting #FOO# is not defined。以下是我正在运行的用于检索值的SQL命令:

declare
l_value varchar2(4000);
begin
l_value := APEX_APP_SETTING.GET_VALUE( p_name => 'FOO');
dbms_output.put_line(l_value);
end;

知道为什么这不起作用吗?

由于您不是在APEX会话中执行代码,因此您需要创建一个APEX会话或将自己附加到现有的APEX会话,否则无法知道从哪个工作区/应用程序获取设置。如果代码是从一个页面中运行的,那么您现有的代码就可以工作了。

请尝试执行以下代码,但将您的应用程序ID和页面ID修改为APEX应用程序中的实际应用程序/页面。用户名无关紧要。

DECLARE
l_value   VARCHAR2 (4000);
BEGIN
apex_session.create_session (p_app_id => 100, p_page_id => 2, p_username => 'any_username');
l_value := APEX_APP_SETTING.GET_VALUE (p_name => 'FOO');
DBMS_OUTPUT.put_line (l_value);
apex_session.delete_session;
END;

如果你想尝试构建一个函数来返回设置值,我建议你构建一个像这样的函数

CREATE OR REPLACE FUNCTION FN_APP_CONFIG (
p_setting_name   APEX_190200.WWV_FLOW_APP_SETTINGS.NAME%TYPE,
p_app_id         APEX_190200.WWV_FLOW_APP_SETTINGS.FLOW_ID%TYPE DEFAULT APEX_APPLICATION.g_flow_id)
RETURN APEX_190200.WWV_FLOW_APP_SETTINGS.VALUE%TYPE
IS
l_value   APEX_190200.WWV_FLOW_APP_SETTINGS.VALUE%TYPE;
BEGIN
SELECT VALUE
INTO l_value
FROM APEX_190200.WWV_FLOW_APP_SETTINGS
WHERE flow_id = p_app_id AND name = p_setting_name;
RETURN l_value;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN NULL;
WHEN TOO_MANY_ROWS
THEN
RETURN NULL;
END;
/

最新更新