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

Access Oracle Apex Application Settings from PL/SQL

我在 these instructions.

之后创建了一个值为 bar 的 apex 应用程序设置 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 会话,否则无法知道 workspace/application 获取设置的内容从。如果代码是来自页面内的 运行,那么您现有的代码将有效。

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

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;

如果您想尝试为 return 设置值构建函数,我建议构建这样的函数

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;
/