我创建了一个包ERP_CONTEXT,然后在包里定义一个过程set_context
  procedure set_context(name in varchar2,value in varchar2) is
  begin
    dbms_session.set_context(NameSpace,name,value);
  end set_app_context;但是在我调用的时候,提示我权限不够,我在网上也查了,很多,用什么方法都不行,请高手指教

解决方案 »

  1.   

    我这里这样没问题,你执行一下看看:
    CREATE PROCEDURE my_test
    AS
    BEGIN
       DBMS_SESSION.set_context ('MYCTX', 'VALUE1', 'HELLO WERLD');
    END;create or replace context myctx using my_test;grant execute on my_test to test;exec my_test;select sys_context('MYCTX','VALUE1') from dual;SYS_CONTEXT('MYCTX','VALUE1')
    -----------------------------------------
    HELLO WERLD
      

  2.   

    这个方法在oracle官网上已经看见过,但是我这不管怎么弄,始终还是提示没有权限
      

  3.   

    按二楼的方法,
    CREATE OR REPLACE PROCEDURE my_test(p_name in varchar2,p_value in varchar2)
    AS
      lv_id          varchar2(20);
    BEGIN
      lv_id :='aaa';
      DBMS_SESSION.set_context(lv_id, p_name, p_value);
    END;
    如果我在创建过程的时候,是传入参数调用的DBMS_SESSION.set_context.不管怎么样,还是会提示权限不足,希望高手来指点,谢谢了
      

  4.   

    namespace不能用变量的,你如果用包,那么reate or replace context myctx using my_test; 上面这句话using后面就用你的包名来代替
      

  5.   

    首先创建过程
    create or replace procedure aaa(vapplue IN  VARCHAR2)
    as 
    begin
         context.app_context(Context.mkt,vapplue);
    end aaa;创建包头
    create or replace package Context is
      NameSpace constant  varchar2(3) := 'ses';
      mkt     constant  varchar2(3) := 'mem';
      
      procedure app_context(p_name in varchar2,p_value in varchar2);
    end Context;创建包体
    create or replace package body Context  is
      procedure app_context(p_name in varchar2,p_value in varchar2) is
      begin
        dbms_session.set_context(NameSpace,p_name,p_value);
      end app_context;
    end Context ;在我调用过程aaa的时候,始终无法调用dbms_session.set_context,提示权限不够,请高手指教,谢谢
      

  6.   

    你需要先create一个context,才能够去set它
    create or replace context ses using context;