ETL系列:一种遍历各个package包中过程的代码的方法
来源:互联网 发布:淘宝支付密码怎么修改 编辑:程序博客网 时间:2024/05/22 05:24
*************************************************** 转发请注明原文,尊重原创** 原文来自: blog.csdn.net/clark_xu 徐长亮的专栏*************************************************
场景:数据仓库中,数据加工的存储过程,要求使用公共的框架进行分区表的分区交换,统计日期转换;
但是总有一些开发者,总是不听话,不按照要求使用公共框架的过程进行分区表的分区交换、统计日期的转换;
针对这种情况,如何通过遍历各个package中所有的存储过程的代码,找到不规范的过程呢?
针对主要的表就是user_source
我的代码如下:
declare cursor cur is select upper(substr(unit_code, 1, instr(unit_code, '.') - 1)) as p_name, upper(substr(unit_code, instr(unit_code, '.') + 1)) as proc_name from meta_unit; --在我的场景中,UNIT_CODE存放包的过程如:pkg_tools.p_test01这样的信息 max_line number; mine_line number; lvc_p_name varchar2(200 char); lvc_proc_name varchar2(200 char); lvc_sql varchar2(2000 char); lvc_count number;begin for mycur in cur loop begin lvc_p_name := mycur.p_name; lvc_proc_name := mycur.proc_name; lvc_sql := 'select min(line) from user_source where name = ''' || mycur.p_name || ''' and type=''PACKAGE BODY'' and text like ''%' || mycur.proc_name || '%'''; execute immediate lvc_sql into mine_line; --希望通过procedure,end procedure来判断procedure在包中的代码的起始行号 max_line := mine_line + 90; /* lvc_sql := 'select max(line) from user_source where name = ''' || mycur.p_name || ''' and type=''PACKAGE BODY'' and text like ''%' || mycur.proc_name || '%'''; execute immediate lvc_sql into max_line;*/ lvc_sql := 'select count(*) from user_source where name = ''' || mycur.p_name || ''' and type = ''PACKAGE BODY'' and line >=' || mine_line || ' and line <=' || max_line || ' and (upper(text) like ''%PKG_0.P_0_GET%'' or upper(text) like ''%PKG_0.P_1_GET_TJRQ%'') '; execute immediate lvc_sql into lvc_count; if lvc_count = '0' then print_proc(lvc_p_name || '.' || lvc_proc_name || ' count(P_0_GET): ' || lvc_count); end if; exception when others then print_proc(lvc_p_name || '.' || lvc_proc_name); end; end loop;end;
1 0
- ETL系列:一种遍历各个package包中过程的代码的方法
- Hibernate各个package包的作用详解
- oracle包package内建管道函数pipelined、过程procedure和函数function的代码
- struts配置中 package 各个属性的说明
- 成功部署SSIS中含有Oracle数据库连接的ETL包
- ETL系列:一种针对oracle分区表的统计信息收集策略
- ETL的安装验收过程
- ETL的四个基本过程.
- Delphi中包(Package)的使用
- Perl脚本语言中包(Package)的用法
- Oracle中包(PACKAGE)的使用方法
- java中常用的包package
- 遍历Javascript数组的一种方法!
- Android 一种遍历ViewGroup的方法
- ETL过程中数据匹配的中文分词算法
- Package Control安装插件失败的一种尝试方法
- Hibernate中各个包的作用简介
- Hibernate中各个包的作用简介
- CleanMyMac 3偏好设置
- 我的 Android 开发实战经验总结
- 【BZOJ1064】[Noi2008]假面舞会【DFS】【分类讨论】
- android右滑返回上一个界面
- Onclick 防止多次点击造成不必要的麻烦
- ETL系列:一种遍历各个package包中过程的代码的方法
- js中 replace(/\//g, '') 什么作用.
- EventBus3.0学习小结
- C++ 初始化列表
- Android 三大图片缓存原理、特性对比
- 待机电流问题,如何查找EINT唤醒源
- 如何清理mac垃圾
- iOS网络编程之TCP/IP应用篇(一)-框架介绍(CocoaAsyncSocket)
- 批量添加数据