самокодированный SYS_CONTEXT - PullRequest
0 голосов
/ 11 февраля 2019

Быстро, я надеюсь.

Я работаю над переносом приложения из оракула в другую БД, которая изначально не поддерживает концепцию SYS_CONTEXT, поэтому хочу прокрутить свою собственную с помощью функций / SP, таблици т. д., чтобы отразить функциональность (по существу, установить / получить пары имя-значение).Я не оракул, есть ли что-то особенное в том, как работает SYS_CONTEXT, и я должен знать, что это меня взбесит?

1 Ответ

0 голосов
/ 11 февраля 2019

Одна вещь, которую следует помнить о пользовательских контекстах, это то, что они могут быть защищены так, что они могут быть изменены только определенным пакетом PL / SQL.

Возьмите этот пример:

CREATE OR REPLACE PACKAGE my_context_pkg AS 
  PROCEDURE set_context_a ( p_value VARCHAR2 );
END;

CREATE OR REPLACE PACKAGE BODY my_context_pkg AS 
  PROCEDURE set_context_a ( p_value VARCHAR2 ) IS
  BEGIN
    DBMS_SESSION.SET_CONTEXT('MY_CONTEXT','A',p_value);
  END;
END;

-- Tell Oracle that only my_context_pkg can modify context 
CREATE CONTEXT my_context USING my_context_pkg;

-- This will fail
EXEC DBMS_SESSION.SET_CONTEXT('MY_CONTEXT','A','5');

-- This will succeed
EXEC my_context_pkg.set_context_a ('5');
...