求 oracle存储过程 解决下问题

现在我要修改一个人的信息(例如身份证号码) 这个人的身份证号码存在于n个表当中 我不知道哪些表是有身份证的字段 也不知道这个人的身份证号码保存在哪些表中(表存在于一个表空间中)。我只知道身份证号码的字段名字为sfz 那我如何写一个存储过程来实现我对有这个人的身份证号码的表进行数据的修改。

提供个大概思路:
1、先查询表all_tab_cols找到含有字段sfz的表:
select table_name from all_tab_cols where column_name='SFZ'

2、遍历查出的表,拼装语句查询是否有sfz=''你要修改的那个身份证号

大概格式如下:
for c in (select t.table_name
from all_tab_cols t
where t.column_name = 'SFZ') loop
--拼装修改语句
v_sql := 'update '||c.table_name||' set sfz=''新身份证号'' where sfz=''原身份证号''';
-- 省略一些步骤。。。。。
DBMS_SQL.EXECUTE(iv_Cursor);
--省略。。。。。
end loop;

如果你的表是确定的,可以通过select table_name from all_tab_cols where column_name='SFZ'语句把有sfz字段的表存储在一张表里,这样就不用每次更新操作都要遍历整个库找表

分解成两个问题回答,你可以自己搞定。

Q:寻找字段名为sfz的表
A:[code="sql"]
SELECT DISTINCT table_name FROM user_tab_columns WHERE COLUMN_NAME='sfz'
[/code]
可能还需要其他条件,看你的需求。

Q:更新某个人的身份证
A:动态拼SQL文,执行
[code="sql"]
sqlStr := 'update ' || 上面查询出的表名 || ' set sfz = ' || 新身份证 || ' where 你的条件';
EXECUTE immediate sqlStr;
[/code]