如何在 不引用 SQL表达式中的 特定列的情况下 选择所有可能包含已知特定值的记录?
例如,我知道,某个 未知 列包含值“ xxx”,并且表中有 许多列 和记录。
谢谢你。
因此,您想对数据库进行类似于Google的免费文本搜索。可以做到,但表演将是Teh
Suck!Google之所以快速,是因为它在其索引上具有索引,重复的数据存储,并且通常针对这种搜索进行总体优化。
无论如何,这是使用动态SQL和Oracle数据字典的概念证明。请注意,我将列限制为要搜索的数据类型,即字符串。
SQL> set serveroutput on size unlimited
SQL> declare
2 dummy varchar2(1);
3 begin
4 for r in ( select table_name, column_name from user_tab_cols
5 where data_type in ('VARCHAR2', 'CHAR', 'CLOB') )
6 loop
7 begin
8 execute immediate 'select null from '||r.table_name
9 ||' where '||r.column_name||' like ''%&search_value%'' '
10 ||' and rownum = 1'
11 into dummy;
12 dbms_output.put_line('Found it in >>>'
13 ||r.table_name||'.'||r.column_name);
14 exception
15 when others then
16 -- bad practice ahoy!
17 null;
18 end;
19 end loop;
20 end;
21 /
Enter value for search_value: MAISIE
old 9: ||' where '||r.column_name||' like ''%&search_value%'' '
new 9: ||' where '||r.column_name||' like ''%MAISIE%'' '
Found it in >>>T23.NAME
PL/SQL procedure successfully completed.
SQL>
一个更健壮的实现可能需要处理大小写,整个单词等。如果您使用的是10g或更高版本,则正则表达式可能会有用,但是将regex和动态SQL结合起来是一个更
有趣的 前景。
我再说一遍,表演将是Teh
Suck!在大数据集上。几乎不可能进行调整,因为我们无法为每一列编制索引,并且当然不支持LIKE或类似的模糊匹配。一种替代方法是使用XQuery生成数据的XML表示,然后使用Text对其进行索引。维护这样的存储库将是开销,但是如果您需要定期使用此功能(尤其是在生产环境中),则将是一项合理的投资。
通过使用,我们可以对所有我们有权使用的表进行更广泛的搜索all_tab_cols
。
for r in ( select owner, table_name, column_name from all_tab_cols
where data_type in ('VARCHAR2', 'CHAR', 'CLOB') )
显然,我们需要在生成的语句中为拥有的模式添加前缀。
execute immediate 'select null from '||r.owner||'.'||r.table_name
||' where '||r.column_name||' like ''%
问题内容: 我有一张下表 我想选择所有item_id,其中表中具有该item_id的每条记录的状态均为A。 例如,如果记录是这样的: 那么我唯一会回来的item_id是2。 问题答案:
问题内容: 一个活动有很多参与者。参与者的字段为“状态”。 我需要找到除以下事件以外的所有事件:每个参与者的状态都为“出席”的事件。 我可以找到带有以下AR代码的某些参与者处于“呈现”状态的所有事件: 这样就创建了SQL: 这 几乎 可行。问题是,如果参与者的某行(在范围内 )的状态为“离开”,则该事件仍将被获取,因为至少某些同级记录的状态与其他状态相同而不是“现在”。 我需要确保我正在过滤所有事
问题内容: 我有一张桌子,桌子之间有一对多的关系。每个记录可以有来自同一张表的n个孩子。例如 给定一个ID,我想递归选择所有文件夹记录的SUM(SIZE)。目标数据库是MySql 5,但是如果它的通用性足以在Oracle和MS- SQL中运行,那将是很好的选择。 我不知道树有多深,可能是1级,可能是50级(或更多) 问题答案: 这可能会有些帮助:http : //mikehillyer.com/a
问题内容: 假设我有两个表,“父母”和“孩子”。父子关系是一个多对多关系,可通过标准的交叉引用表来实现。 我想查找使用SQL(特别是MS SQL Server的T-SQL; 2005语法可以接受)的给定子集的所有成员所引用的所有Parent记录。 例如,假设我有: List item Parent Alice Parent Bob Child Charlie references Alice, B
问题内容: 如何记录django应用程序执行的所有SQL查询? 我想记录所有内容,包括来自管理站点的SQL。我看到了这个问题和一个常见问题解答,但是我仍然不知道应该把它放在哪里 将所有内容记录到一个文件? 所以我的问题是-我应该怎么做才能拥有一个记录所有SQL语句的文件(例如all-sql.log)? 问题答案: 也许看看https://github.com/django-debug-toolba
问题内容: 如何使用jQuery选择应用了特定CSS属性的所有元素?例如: 如何通过名为“四舍五入”的属性进行选择? CSS类名非常灵活。 如何将这两个操作替换为一个操作。也许是这样的: 有什么更好的方法吗? 问题答案: 您不能(使用CSS选择器)根据已应用于它们的CSS属性来选择元素。 如果您想手动执行此操作,则可以选择文档中的每个元素,在它们上循环,然后检查您感兴趣的属性的计算值(尽管这可能仅