您可以使用DBMS_ADVANCED_REWRITE将SQL重写为不区分大小写的版本。
微妙地改变这样的查询可能会造成混淆,并且可能会使故障排除和调整变得困难。该软件包也有一些限制,可能会使其不切实际,如不支持绑定变量。
1.示例模式
SQL> drop table test1;
Table dropped.
SQL> create table test1(a varchar2(100));
Table created.
SQL> insert into test1 values ('case INSENSITIVE');
1 row created.
SQL> commit;
Commit complete.
2.查询最初是大小写敏感的和匹配0行
SQL> select count(*) total from test1 where a like '%case insensitive%';
TOTAL
----------
0
3.创建重写等价 - 增加一个LOWER
功能
SQL> begin
2 sys.dbms_advanced_rewrite.declare_rewrite_equivalence(
3 name => 'case_insensitive_1',
4 source_stmt => q'[select count(*) total from test1 where a like '%case insensitive%']',
5 destination_stmt => q'[select count(*) total from test1 where lower(a) like '%case insensitive%']',
6 validate => false
7 );
8 end;
9/
PL/SQL procedure successfully completed.
4.现在,同样的查询是不区分大小写的匹配和1排
SQL> alter session set query_rewrite_integrity = trusted;
Session altered.
SQL> select count(*) total from test1 where a like '%case insensitive%';
TOTAL
----------
1
如果你不能改变的select语句,想必你不能修改应用程序设置和重置会话它的任何一面被称为?登录触发器可能会改变整个会话的NLS,但你已经排除了这一点。搜索条件是否总是固定大小写 - 无论是完全上限还是下限?如果是这样,在表格前使用视图可能性? –
嗨亚历克斯,是的这将是一个解决方案,如果它不影响插入和更新 – PausBanderI