自编码SYS_CONTEXT

时间:2019-02-11 18:10:21

标签: oracle sybase

我希望是一个快速的

我正在努力将应用程序从oracle移植到本身不支持SYS_CONTEXT概念的另一个DB,因此希望通过函数/ SP,表等来实现自己的功能以镜像功能(设置/获取名称)值对)。我不是Oracle专家,我需要知道SYS_CONTEXT的工作方式是否特别吗?

1 个答案:

答案 0 :(得分:0)

关于用户定义的上下文,要记住的一件事是它们可以被保护,以便只能由某个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');