如何解决如果表的列包含特定值,如何返回表名列表?
我想返回该表中一行的所有表名的列表,其中包含特定值“%searchString%”
我在表单中看到过类似的问题,但无法解决与 oracle 数据库相关的问题“我正在使用 sqldeveloper 进行连接”。我不是知道如何将脚本从一个环境映射到另一个环境的专家。
我可以通过
获得所有可用表的列表SELECT table_name FROM all_tables
并且我能够通过
获取特定表的所有列名的列表SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='tableName'
伪代码
result = [] #empty list
searchString = "desiredString"
tableNames = getTableNames() #all tables in DB
for (int i = 0; i < tableNames.length; i++){
match = false
tableRows = # list containing all rows of that table
columnNames = # list of all column names of that table
for (int j = 0; j< tableRows.length; j++){
for (int k = 0; k<columnName.length ; k++){
if(tableNames[i].tableRows[j].columnNames[k].value.contains(searchString)){
match = true
break
}
if (match == true) break
}
if(match == true) result.append(tableNames[i])
}
print result
感谢下面的评论,我能够结合一些解决方案,并且运行良好,如下所示
variable val varchar2(255)
exec :val := 'oldDomain.com'
WITH char_cols AS
(SELECT /*+materialize */ table_name,column_name
FROM cols
WHERE data_type IN ('CHAR','VARCHAR2'))
SELECT DISTINCT SUBSTR (:val,1,11) "Searchword",SUBSTR (table_name,14) "Table",SUBSTR (column_name,14) "Column"
FROM char_cols,TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select "'
|| column_name
|| '" from "'
|| table_name
|| '" where upper("'
|| column_name
|| '") like upper(''%'
|| :val
|| '%'')' ).extract ('ROWSET/ROW/*') ) ) t
ORDER BY "Table"
/
好的想法是我想用一个新的值替换这个值。
假设我想将“oldDomain.com”替换为“newDomain.com”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。