我要完成个需求,是对好多表里面的字段机构:例如 非空字段验证,主外键关系对应的表等等 还有是就是涉及到每个字段的值,验证字段值是否合法 例如 字段值的日期格式,字段值的取值范围(当然有一套取值规则)就是按照规则进行验证字段值的。我设计的是 主存储过程 循环取所有表名, 再套用子存储过程 循环每张表的每个字段(到此是基于表结构上校验)对每个重要字段验证。。然后再去套用一个存储过程(接收上层的 字段名和表名 ) 去循环该字段的值。拿到值后 对值逐一检验。然后有个检验结果表,把检验结果顺便insert到结果表里,给以后出报表用。   这二逼 需求是要我搞个 数据检核清洗 工具啊 我++
我的问题是 最后一个过程 接收的 表名和字段名(输入参数么) 怎么写在游标里面去。我试了动态拼sql 貌似不行,直接拼参数也貌似不行 。怎么搞 求高手 解法。  还有 是不是我的设计有问题。。求大神们 解答 。

解决方案 »

  1.   

    我的思路:是直接给表上的列添加相应的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
                                    when others then
                                            dbms_output.put_line(v_tab_name || ' , ' || v_col_name || ' can not be processed');
                            end;
                    end loop;
            end loop;
    end;
      

  2.   

    就使用动态SQL可以的,用 DBMS_SQL 包