Skip to content

packages sess.apply_contexts

Jan Kvetina edited this page Sep 27, 2020 · 1 revision

sess.set_contexts

Repository spec: sess.set_contexts, body: sess.set_contexts

This procedure parse input payload and store it in SYS_CONTEXT.

You might want to check also sess.get_contexts procedure.


Signature

PROCEDURE apply_contexts (
    in_contexts         sessions.contexts%TYPE,
    in_append           BOOLEAN                     := FALSE
);
Show code (40 lines)

PROCEDURE apply_contexts (
    in_contexts         sessions.contexts%TYPE,
    in_append           BOOLEAN                     := FALSE
) AS
    payload_item        sessions.contexts%TYPE;
    payload_name        sessions.contexts%TYPE;
    payload_value       sessions.contexts%TYPE;
BEGIN
    IF NOT in_append THEN
        -- clear contexts
        FOR c IN (
            SELECT s.attribute
            FROM session_context s
            WHERE s.namespace       = sess.app_namespace
                AND s.attribute     != sess.app_user_attr            -- user_id has dedicated column
                AND s.value         IS NOT NULL
        ) LOOP
            sess.set_context (
                in_name     => c.attribute
            );
        END LOOP;
    END IF;
    --
    IF in_contexts IS NULL THEN
        RETURN;
    END IF;
    --
    FOR i IN 1 .. REGEXP_COUNT(in_contexts, '[' || sess.splitter_rows || ']') + 1 LOOP
        payload_item    := REGEXP_SUBSTR(in_contexts, '[^' || sess.splitter_rows || ']+', 1, i);
        payload_name    := RTRIM(SUBSTR(payload_item, 1, INSTR(payload_item, sess.splitter_values) - 1));
        payload_value   := SUBSTR(payload_item, INSTR(payload_item, sess.splitter_values) + 1);
        --
        IF payload_name IS NOT NULL THEN
            sess.set_context (
                in_name     => payload_name,
                in_value    => payload_value
            );
        END IF;
    END LOOP;
END;

Minimal example

DECLARE
    payload         contexts.payload%TYPE;
BEGIN
    tree.log_module();
    sess.init();

    -- get payload
    SELECT c.payload INTO payload
    FROM contexts c
    WHERE c.payload     IS NOT NULL
        AND ROWNUM      = 1;

    -- set as current
    sess.set_contexts(payload);
END;
/

Check current contexts:

SELECT s.*
FROM session_contexts s
ORDER BY 1, 2;

Clone this wiki locally