日期:2014-05-17  浏览次数:21011 次

oracle存储过程
我要完成个需求,是对好多表里面的字段机构:例如 非空字段验证,主外键关系对应的表等等 还有是就是涉及到每个字段的值,验证字段值是否合法 例如 字段值的日期格式,字段值的取值范围(当然有一套取值规则)就是按照规则进行验证字段值的。

我设计的是 主存储过程 循环取所有表名, 再套用子存储过程 循环每张表的每个字段(到此是基于表结构上校验)对每个重要字段验证。。然后再去套用一个存储过程(接收上层的 字段名和表名 ) 去循环该字段的值。拿到值后 对值逐一检验。然后有个检验结果表,把检验结果顺便insert到结果表里,给以后出报表用。   

这二逼 需求是要我搞个 数据检核清洗 工具啊 我++


我的问题是 最后一个过程 接收的 表名和字段名(输入参数么) 怎么写在游标里面去。我试了动态拼sql 貌似不行,直接拼参数也貌似不行 。怎么搞 求高手 解法。  

还有 是不是我的设计有问题。。求大神们 解答 。

------解决方案--------------------
我的思路:是直接给表上的列添加相应的check约束,如果能添加成功,说明此字段的内容合法,否则不合法。例:以下代码用来检查当前用户下所有表的所有字段的内容是否有空值。
declare
        v_tab_name varchar2(10);
        v_col_name varchar2(10);
begin
        for x in (select table_name from user_tables) loop
                for xx in (select column_name from user_tab_columns where table_name = x.table_name) loop
                        begin
                                v_tab_name := x.table_name;
                                v_col_name := xx.column_name;
                                execute immediate 'alter table ' 
------解决方案--------------------
 v_tab_name 
------解决方案--------------------
 ' modify ' 
------解决方案--------------------
 v_col_name 
------解决方案--------------------
 ' not null';
                                execute immediate 'alter table ' 
------解决方案--------------------
 v_tab_name 
------解决方案--------------------
 ' modify ' 
------解决方案--------------------
 v_col_name 
------解决方案--------------------
 ' null';
                        exception