Oracle的USER_TAB_COLUMNS与DBA_TAB_COLUMNS

最近需要做一个模糊化核查的功能。功能为查看别人数据库中存储的数据是否做了模糊化,如客户数据表中的手机字段末三位应为***.目前我们代码的思路是对指定表的所有字段做egexp_like,正则为提前给出。为了能有效的遍历表中的每个字段,需要从oracle的视图中查询出某个表所含有的所有字段。今天在对别人的库中核查数据时发现指定表的字段为空。什么鬼,直连过去明明是有数据的。在程序中插了几个眼发现查询表的所有字段时使用了USER_TAB_COLUMNS,这里产生了空数据。翻到oracle文档:

USER_TAB_COLUMNS describes the columns of the tables, views, and clusters owned by the current user. Its columns (except for OWNER) are the same as those in “ALL_TAB_COLUMNS”. To gather statistics for this view, use the ANALYZE SQL statement.

如上所述,这个视图中只是当前用户拥有表的字段名称。而我们得到的数据库用户名密码与要核查的用户名是不同的,由于我们只能拿到数据库高权限用户的用户信息,咨询身边的DBA同学后改用DBA_TAB_COLUMNS。关于这个视图的文档:

DBA_TAB_COLUMNS describes the columns of all tables, views, and clusters in the database. Its columns are the same as those in “ALL_TAB_COLUMNS”. To gather statistics for this view, use the SQLANALYZE statement.

这里就可以看到所有用户表的字段名了。

 

每天进步一点点,每天写一点点。

发表评论

电子邮件地址不会被公开。 必填项已用*标注