【问题标题】:Looking for tables/columns that contain specific substring查找包含特定子字符串的表/列
【发布时间】:2015-01-31 10:27:52
【问题描述】:

有没有办法使用 sql 或 plsql 查询整个 Oracle 数据库以返回包含特定子字符串的所有表/列的列表?请注意,我想在数据中查找子字符串(而不是在表/列名本身)。

我有一个问题,一个字符看起来像一个空格,但实际上是一个不同的字符。我已经通过获取子字符串文本并将其放入十六进制转换器来证明这一点。我需要能够在数据库中找到这个字符存在的任何地方,所以我可以用一个实际的空间来替换它。

有什么想法吗?

【问题讨论】:

  • 您可以使用 ALL_TAB_COLUMNS 在列和表中使用 like 进行搜索
  • 感谢 Gerrat,它给了我想要的东西,现在可以适当地修复我的客户数据。

标签: sql oracle plsql


【解决方案1】:

如果您只是查找表名和列名,可以使用视图:ALL_TAB_COLUMNS:

SELECT owner, table_name, column_name FROM all_tab_columns 
WHERE table_name LIKE UPPER('%search_string%') 
OR column_name LIKE UPPER('%search_string%');

如果您想在其他地方搜索名称,可以使用 ALL_OBJECTS 视图:

SELECT owner, object_name, object_type 
FROM all_objects WHERE object_name LIKE UPPER('%search_string%') ;

【讨论】:

  • ALL_TAB_COLUMNS 会给我表名和列名,但我需要能够在列中保存的数据中查找特定的子字符串,然后列出所有表/列名将包含特定字符的数据存储在其中
  • ...所以您想遍历每个表中具有类似数据的字符的每一列并搜索字符串?您需要编写一个存储过程。从 ALL_TAB_COLUMNS 中获取表名和列名,并编写一个动态 sql 语句,在每个类似字符串的列中搜索您的搜索字符串。玩得开心。
  • 我编辑了 OP 以澄清请求是搜索数据而不是最初声明的列名。
【解决方案2】:

您可以使用ALL_TAB_COLUMNS table 在列和表中使用like 进行搜索。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多