服务于区块链开拓者

www.zhidnet.com

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

创建上下文

create or replace context stud_security using hu.pkg_security accessed globally;

-- 创建程序包

create or replace package hu.pkg_security is

    procedure set_security(a_vcparameter varchar2,a_vcvalue varchar2);

    function studname

    return varchar2;

   end pkg_security;

/

-- 创建包体

create or replace package body hu.pkg_security is

    procedure set_security(a_vcparameter varchar2,a_vcvalue varchar2)

    is

   begin

         dbms_session.set_context(namespace=>'STUD_SECURITY',

              attribute=>a_vcparameter,value=>a_vcvalue);

   end set_security;

function studname

return varchar2

is

vcstudname varchar2(20):=null;

begin

     select 姓名 into vcstudname from hu.学生基本信息

     where 学号=to_number(sys_context('stud_security','学号'));

return vcstudname;

end studname;

end pkg_security;

/

-- 设置输出

set serveroutput on

-- 通过调用新包设置命名空间stud_security中学号的值,并查询出学生姓名

declare

      lvc_学号 varchar2(20):=null;

      lvc_姓名 varchar2(8):=null;

   begin

      pkg_security.set_security('学号','222005389081084');

      begin

        select sys_context('stud_security','学号') into lvc_学号 from dual;

      end;

      dbms_output.put_line('value for stud_security.学号 via userenv call is:' ||lvc_学号);

      lvc_姓名:=pkg_security.studname;

      dbms_output.put_line('student name:'|| lvc_姓名);

end;

/

1.create or replace procedure alter_constraints(para_alter in varchar2) is

v_cursorid integer;

v_strcon varchar2(300);

v_strtri varchar2(300);

v_fknum number:=0;

v_trinum number:=0;

v_sqlerrm varchar2(600);

cursor c_con is

    select * from user_constraints where constraint_type='R';

r_con c_con% rowtype;

cursor c_trigger is

    select trigger_name,status from user_triggers;

notfound boolean;

begin

    dbms_output.put_line('begin time:'||to_char(sysdate));

    if(upper(para_alter)='DISABLE' or upper(para_alter)='ENABLE') then

       open c_con;

       v_cursorid:=dbms_sql.open_cursor;

       loop

         fetch c_con into r_con;

         notfound:=c_con% notfound;

         exit when notfound;

         begin

           if(upper(para_alter)='DISABLE' and r_con.status='ENABLED' or

               upper(para_alter)='ENABLE' and r_con.status='DISABLED') then

             v_strcon:='alter table '||r_con.owner||'.'||r_con.table_name||' '||

               upper(para_alter)||' constraint '||r_con.constraint_name;

             dbms_sql.parse(v_cursorid,v_strcon,dbms_sql.v7);

             v_fknum:=v_fknum+1;

          end if;

        exception

        when others then

          v_sqlerrm:=substr(sqlerrm,1,600);

          dbms_output.put_line('error:'||' '||v_sqlerrm);

        end;

      end loop;

      close c_con;

      dbms_output.put_line('===外键被'||para_alter||',总数'||to_char(v_fknum)||'===');

      for t_trigger in c_trigger loop

      begin

        if(upper(para_alter)='DISABLE' and t_trigger.status='ENABLED' or

            upper(para_alter)='ENABLE' and t_trigger.status='DISABLED') then

           v_strtri:='alter trigger '||t_trigger.trigger_name||' '||upper(para_alter);

        dbms_sql.parse(v_cursorid,v_strtri,dbms_sql.v7);

        v_trinum:=v_trinum+1;

        end if;

      exception

      when others then

          v_sqlerrm:=substr(sqlerrm,1,600);

          dbms_output.put_line('error:'||' '||v_sqlerrm);

      end;

      end loop;

      dbms_output.put_line('===触发器被'||para_alter||',总数'||to_char(v_trinum)||'===');

      dbms_sql.close_cursor(v_cursorid);

    else

      dbms_output.put_line('error:输入参数不正确,参数应为enable或disable!');

    end if;

    dbms_output.put_line('end time:'||to_char(sysdate));

end alter_constraints;

posted on 2012-08-01 19:13  知点网  阅读(2031)  评论(0编辑  收藏  举报