2013-01-16 78 views
0

Oracle 10g中是否有一種方法可以設置不區分大小寫的搜索,並且還可以針對某些表上的所有傳入選擇進行翻譯?忽略大小寫表中所有選擇的情況

我有一個選擇是這樣的:

SELECT city.city_name as city, 
    city.city_zip as zip, 
    city.city_name || ' - ' || county.county_name as county 
FROM T_ADDRESSFILLCITY city 
JOIN T_ADDRESSFILLCOUNTY county ON county.countyid = city.countyid 
WHERE LOWER(TRANSLATE(city.city_name, 'úüűůéěäáôöőóťčížďňšŕýľřĺąćęłńóśźż', 'uuuueeaaooootcizdnsrylrlacelnoszz')) LIKE LOWER(TRANSLATE({PARAM}, 'úüűůéěäáôöőóťčížďňšŕýľřĺąćęłńóśźż', 'uuuueeaaooootcizdnsrylrlacelnoszz')) 

但我想將其更改爲這個

SELECT city.city_name as city, 
    city.city_zip as zip, 
    city.city_name || ' - ' || county.county_name as county 
FROM T_ADDRESSFILLCITY city 
JOIN T_ADDRESSFILLCOUNTY county ON county.countyid = city.countyid 
WHERE city.city_name LIKE {PARAM} 

,並有一個數據庫機制(整理?觸發器?)做忽略大小寫併爲所有選擇默認翻譯。

但是,這應該只適用於特定的表格,而不是整個數據庫。我找不到任何東西。提前感謝您的提示。

回答

1

你應該嘗試設置:

alter session set nls_comp='LINGUISTIC'; 
alter session set nls_sort='BINARY_AI'; 

,然後運行第二個查詢。這應該在LIKE上提供重音不區分大小寫的搜索。 參考:http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch5lingsort.htm#CIHJBFAD

替代方案是使用convert。例如: -

where upper(convert(name, 'US7ASCII')) like upper(convert('%e%', 'US7ASCII')); 
+0

我能找到這個和它的作品完美,謝謝你,而是因爲我不知道怎麼ALTER SESSION作品我沒有使用它。我認爲它也會影響在其他表上執行的所有其他選擇,這是不好的。我需要這樣的東西,但它只適用於特定的表格。此外,我從應用程序調用此選擇,並從連接池中獲得連接,所以我真的不知道會改變會話的效果。 –

+0

@ sando.lakatos unfortunatley你必須使用「喜歡」操作的會話設置,因爲NLSSORT不會使用它。您可以從池中獲取連接,設置參數,運行查詢,然後再次更改它們以防止任何副作用影響後續SQL。但是一個無辜的人是將該列+字符串轉換爲ascii。即嘗試'在哪裏上(convert(name,'US7ASCII'))like upper(convert('%e%','US7ASCII'));' – DazzaL

+0

我認爲可以在表上設置這樣的行爲,但不要猜測。然後,我會嘗試使用改變會話,但轉換似乎不適合我。謝謝你的答案。 –