ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 有关存储过程函数触发器的备忘

有关存储过程函数触发器的备忘

原创 Linux操作系统 作者:prt 时间:2009-03-09 11:56:54 0 删除 编辑

1.在存储过程中执行创建表的语句会出现没有权限的错误,需要显示的授予该用户创建表的权限,如grant create table to prt;
但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程
实际上,oracle给我们提供了在存储过程中使用role权限的方法:
修改存储过程,加入Authid Current_User时存储过程可以使用role权限。
create or replace procedure p_create_table
Authid Current_User is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
这样就可以直接运行了,而不必显示的赋予该用户创建表的权限。

2.存储过程创建list分区表
vs_sql := 'create table ' || vs_tabname_tmp || '
    (
      ID        NUMBER not null,
      PF_ID     VARCHAR2(128) ,
      ... ...
      PARTITIONID VARCHAR2(300),
    ) partition by list (PARTITIONID)
    (
     partition p_1 values (''1'')
     )';
    execute immediate vs_sql;

    for vi_loop in 2 .. ai_i loop
      vs_sql := 'alter table ' || vs_tabname_tmp || ' add partition p_' ||
                vi_loop || ' values (''' || vi_loop || ''')';
      execute immediate vs_sql;
    end loop;

    --最后增加一个默认分区
    vs_sql := 'alter table ' || vs_tabname_tmp ||
              ' add partition p_0 values (default)';
    execute immediate vs_sql;

    vs_sql := 'create index IDX_' || vs_tabname_tmp || '_1 on ' ||
              vs_tabname_tmp || ' (BUY_DATE,MOVIE_ID, CLIENT_ID) local ';
    execute immediate vs_sql;

3.取汉字拼音首字母

create or replace function f_Get_Py
 (V_Str varchar2)
 return varchar2
 as
   v_strlen int;
   v_return varchar2(500);
   v_ii int    ;
   v_n int;
   v_c char(1);
   v_chn varchar2(2);
   V_RC varchar2(500);
 begin
  V_RC:=V_Str;
 
  v_strlen :=lengthb(V_RC);
  v_return := '';
  v_ii:=0;
  while v_ii   v_ii:=v_ii+1;
   v_n:=63;
   SELECT substr(V_RC,v_ii,1) INTO v_chn FROM DUAL;
 
   select v_n+max(rowsf) into v_n
    from(
    select chn,ROWNUM rowsf from(
    select chn from (
      select '吖'  chn  from dual
      union  select '八'   from dual
     union all  select '嚓'  from dual
      union all  select '咑'   from dual
      union all  select '妸'    from dual
      union all select '发'    from dual
      union all select '旮'   from dual
      union all select '铪'   from dual
      union all select '丌'  from dual--because have no 'i'
      union all select '丌'   from dual
     union all select '咔'    from dual
      union all select '垃'   from dual
      union all select '嘸'   from dual
      union all select '拏'    from dual
      union all select '噢'   from dual
      union all select '妑'   from dual
      union all select '七'   from dual
      union all select '呥'    from dual
      union all select '仨'    from dual
      union all select '他'    from dual
      union all select '屲'  from dual
     union all select '屲'  from dual
      union all select '屲' from dual
      union all select '夕'  from dual
      union all select '丫'  from dual
      union all select '帀'    from dual
      union all select v_chn from dual
     )  a
    order by nlssort(chn,'NLS_SORT=SCHINESE_PINYIN_M')
    ) c
     )  b WHERE chn=v_chn ;
   v_c:=chr(v_n);
   if chr(v_n) ='@' then--英文直接返回
    v_c:=v_chn    ;
    end if;
  v_return:=v_return||v_c;
  end loop;
  return v_return;
 end;


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/559237/viewspace-563318/,如需转载,请注明出处,否则将追究法律责任。

下一篇: rman恢复
请登录后发表评论 登录
全部评论

注册时间:2008-05-09

  • 博文量
    61
  • 访问量
    181572