【发布时间】:2012-10-06 23:19:07
【问题描述】:
我需要在 oracle 数据库中的所有表中搜索特定字符串并返回找到该字符串的所有记录。我正在使用 SQL Developer。网上已经发布了几个非常有用的脚本和存储过程,它们提供了一种搜索整个数据库的方法,它们似乎都能够返回找到字符串的表名和列名。我实际上希望看到像 select * 语句这样的行,但我希望它适用于我数据库中的所有表。我想指出,我是一个非常初学者,我不熟悉高级 PL/SQL 脚本和数据库概念,所以虽然我已经尝试并尝试过,但我似乎无法弄清楚,所以任何输入都将不胜感激。
这是我试图修改的脚本(其他人的解决方案)
declare
l_count number := 0;
l_str varchar2(20) := '%test%';
begin
for rec in (select table_name, column_name
from user_tab_columns
where data_type in ( 'VARCHAR2' , 'VARCHAR', 'CHAR' ) ) loop
execute immediate 'select count(*) from '||rec.table_name||
' where '||rec.column_name||' like '''||l_str||'''' into l_count;
if l_count > 0 then
dbms_output.put_line('Table : '||rec.table_name||' '||rec.column_name);
end if;
end loop;
end;
/
【问题讨论】:
-
您希望它准确返回什么数据? (这个 soltn 发布的返回使用计数来确定表是否包含带有该字符串的任何行)
-
我希望能够获取具有特定字符串的记录,并返回这些记录的所有列值(整行的信息)。例如当 select * from emp;返回具有所有列和值的所有记录。所以我想要这样的东西,但对于整个数据库,并且能够将其过滤到具有特定搜索字符串的记录。如果这含糊不清,我深表歉意。
-
您将无法在与您的搜索词匹配的所有表上执行
SELECT *,因为每个表中的列几乎肯定会有所不同。您需要确定您真正需要的输出列,然后将所有表连接在一起以获得这些列,然后根据您的搜索词进行过滤 -
我敢问你需要这个做什么?答案可能会比尝试从(可能)数据库中的每个表中转储 select * 输出更好的方法。如果它的作业,它似乎是一个糟糕的设计(或解决问题)的练习,但我再次需要知道试图通过这个解决的真正问题。
-
感谢您的回复。如果我没有清楚地解释自己,我很抱歉。这不是家庭作业。我正在创建一个包含患者信息(和相关数据)的数据库。我需要搜索特定关键字并检索所有记录并能够查看每个患者的相关信息。有几个不同的表具有不同的列名,我不知道可能会找到哪些表和哪些列。
标签: sql database oracle oracle11g