我要完成个需求,是对好多表里面的字段机构:例如 非空字段验证,主外键关系对应的表等等 还有是就是涉及到每个字段的值,验证字段值是否合法 例如 字段值的日期格式,字段值的取值范围(当然有一套取值规则)就是按照规则进行验证字段值的。
我设计的是 主存储过程 循环取所有表名, 再套用子存储过程 循环每张表的每个字段(到此是基于表结构上校验)对每个重要字段验证。。然后再去套用一个存储过程(接收上层的 字段名和表名 ) 去循环该字段的值。拿到值后 对值逐一检验。然后有个检验结果表,把检验结果顺便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