捷凌网安Oracle频道
中国IT教育
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 讨论
 您现在的位置: 捷凌网安 >> Oracle >> 开发技术 >> 正文
两个Oracle存储过程程序分享

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-4-30 5:18:39

   为了解决日常工作中的问题,再加上好久没有写程序,利用这个周末的时间写了如下的存储过程或函数,公布于此处,希望能对大家写这一类的程序有所启发。大家对写程序可能有一个误区,有些人常说:你看我什么语言都会,比如说C,C++,VB,perl,shell,其实语言的本身并不重要,重要的还是在算法上,置于语法,用时去查一下就可以了。

  第一个存储过程,属性串替换函数,常用于数据订正过程中(使用oracle提供的replace函数会有问题)

create or replace function sp_replace_property_value(v_ch varchar2,v_from varchar2,v_to varchar2) return varchar2
/*
creator:danchen
create_time:2008-4-19
function:replace taobao' property name and property value id as group
v_ch 属性串;v_from 源属性; v_to 目标属性,目标属性可为空,则变成删除属性
*/
as
--定义返回的返回的属性字符串
result_v varchar2(200):='';
--定义剩余属性字符串变量
temp_v varchar2(200):='';
--定义分号位置
fenhao_address number;
--定义临时属性对变量
v_pv varchar2(20);


begin
    if v_ch is null or v_from is null then
        return 'error';
    end if;
   
     if instr(v_ch,':') = 0 or instr(v_from,':')= 0 then
         return 'error';
     end if;
   
    temp_v := v_ch;
     loop
         fenhao_address := instr(temp_v,';');
         if fenhao_address=0 then
              --没有找到分号,则为最后一组属性名:属性值
              v_pv := temp_v;
              --检查属性是否是要替换的属性
              if v_pv != v_from then
                     result_v := result_v||';'||v_pv ;
              else
                    if v_to is not null then
                       result_v := result_v||';'||v_to;
                    end if;
              end if;
              --跳出循环
              exIT;
          else
             --取出属性对
             v_pv := substr(temp_v,1,instr(temp_v,';')-1);
              --检查属性是否是要替换的属性
              if v_pv != v_from then
                  result_v := result_v||';'||v_pv ;
              else
                 if v_to is not null then
                       result_v := result_v||';'||v_to;
                 end if;
              end if;
             --得到剩余的属性对
             temp_v := substr(temp_v,instr(temp_v,';')+1);
          end if;        
     end loop;
    
     --对结果进行处理,去掉最左侧的分号
     if substr(result_v,1,1)=';' then
          result_v := substr(result_v,2);
     end if;
     --返回结果
     return result_v;
end sp_replace_property_value;

[1] [2] [3] 下一页

  • 上一篇文章:

  • 下一篇文章:
  •  
     最进更新
    普通文章如何获得Oracle DBA工作?05-11
    普通文章分别删除数据表记录的方法05-11
    普通文章实例讲解删除表空间时存在的05-11
    普通文章Oracle Wait Event:Data fil05-11
    普通文章重复利用这个外部表的表结构05-11
    普通文章Oracle 9i数据库的用户创建以05-11
    普通文章Oracle数据库应用程序中RAID05-11
    普通文章如何更改监听器设置05-11
    普通文章Oracle中SQL语句执行效率的查05-11
    普通文章掌握数据库链路的建立和使用05-11
     
     推荐文章
    推荐文章研究人员发现攻击Oracle数据04-30
    推荐文章研究人员找到新方法黑掉Orac04-30
    推荐文章数据库产业商业模式大猜想04-30
    推荐文章一种并发控制的精典案例04-30
    推荐文章讲解Oracle在Solaris下的性能04-30
    推荐文章Oracle中为什么会产生回滚与04-30
    推荐文章实例讲解sql_trace和access 04-30
    推荐文章Oracle数据库9i和10g环境下使04-30
    推荐文章Oracle数据库后台进程的具体04-30
    推荐文章Oracle数据库中Undo数据段的04-30
     
     热点文章
    普通文章PB内置Oracle数据库接口的使03-27
    普通文章用最简单的方法记录Oracle语03-27
    推荐文章教你快速掌握Oracle数据库的03-27
    推荐文章详细讲解"Oracle"数据库的“03-27
    普通文章深入讲解Oracle数据库的多栏03-27
    推荐文章教你快速掌握一个简单的Orac03-27
    推荐文章初学者应该如何理解Oracle的03-27
    普通文章怎样将"Oracle"的外部表汉字03-27
    推荐文章解决不同字符集数据库间的数03-27
    普通文章Oracle的window服务启动时并03-27

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号