您可以使用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