Set Oracle case Insensitive?
Hi All,
Is there any way I can make Oracle 10g Case Insensitive. I tried searching and found this link, but I didn't got my answer as http://www.dba-oracle.com/t_case_insensitive_indexes_searches.htm is not working.
case insensitive
Thanks,
Danish
Is there any way I can make Oracle 10g Case Insensitive.For all the database ? I'm really not convinced that's a good idea, on query level it looks better.
Anyway, here below an example :
Re: case sensitivity
Nicolas.
Similar Messages
-
Oracle Case insensitivity problem
Hi
To alter my session to make case insensitive I've set session variables as follows,
NLS_SORT------>BINARY_CI
NLS_COMP------>LINGUISTIC
Now when I ran the following query I'm getting error ORA-00600.
select * from (select customer_id ,row_number() over (order by customer_id) from customer where customer_name like 's%')
when I change the query as follows I'm getting the results,
select * from (select customer_id from (select customer_id from customer where customer_name like 's%'))
As per my observation if I use either ROW_NUMBER() or ROWNUM in the inner query I'm getting the mentioned exception.
How to avoid this exception, as I require ROW_NUMBER() in the inner query to restrict the no.of case insensitive records dynamically.
regards,
harryharrry wrote:
Hi
To alter my session to make case insensitive I've set session variables as follows,
NLS_SORT------>BINARY_CI
NLS_COMP------>LINGUISTIC
Now when I ran the following query I'm getting error ORA-00600.ORA-00600 = open an SR with Oracle Support or use the ora-0600 lookup tool on MetaLink.
select * from (select customer_id ,row_number() over (order by customer_id) from customer where customer_name like 's%')
when I change the query as follows I'm getting the results,
select * from (select customer_id from (select customer_id from customer where customer_name like 's%'))
As per my observation if I use either ROW_NUMBER() or ROWNUM in the inner query I'm getting the mentioned exception.
How to avoid this exception, as I require ROW_NUMBER() in the inner query to restrict the no.of case insensitive records dynamically.
regards,
harry -
Case insensitivity setting?
I hope someone can help me. I am using Oracle 9i as my database with Remedy ARS on top. I want to have all queries/searches on text fields to be case insensitive. Remedy indicates this is a database setting but I can't find it documented anywhere. Please Advise...
Thanks,
Doug...Hi,
As far as I know there is no way to make Oracle case insensitive, without using functions.
Paolo -
Casi insensitive while inserting
I have seen a new feature in oracle10G where we can make oracle case insensitive but it works at select but not at insert.
For example
SQL> create table a(name varchar2(10) primary key);
Table created.
SQL> create table b(name varchar2(10) references a)
2 ;
Table created.
SQL> insert into a values('Pan');
1 row created.
SQL> insert into b values('pan');
insert into b values('pankaj')
ERROR at line 1:
ORA-02291: integrity constraint (DBO.SYS_C00673363) violated - parent key not
found
If i write p in lower case it gives me error in referential integrity.Is there any way where we can insert without checking the case.I dont want to use upper function.I wouldn't work through a reference constraint.
Maybe through a trigger "instead of" as I show here below, but you have to think about the business rule of such thing :
SQL> create table a(name varchar2(10) primary key);
Table created.
SQL>
SQL> create table b(name varchar2(10) references a);
Table created.
SQL>
SQL> insert into a values('Pan');
1 row created.
SQL>
SQL> insert into b values('pan');
insert into b values('pan')
ERROR at line 1:
ORA-02291: integrity constraint (SYSADM.SYS_C00465443) violated - parent key
not found
SQL>
SQL> drop table b;
Table dropped.
SQL> create table b_tbl(name varchar2(10));
Table created.
SQL> create or replace view b as select * from b_tbl;
View created.
SQL> create or replace trigger trg_bi_b
2 instead of insert on b
3 begin
4 insert into b_tbl
5 select :new.name
6 from a
7 where upper(name)=upper(:new.name);
8 if sql%rowcount = 0 then
9 raise_application_error(-20001,'Name doesn''t exists into a table');
10 end if;
11 end;
12 /
Trigger created.
SQL> insert into b values('pan');
1 row created.
SQL> insert into b values('Pan');
1 row created.
SQL> insert into b values('pAn');
1 row created.
SQL> insert into b values('PAN');
1 row created.
SQL> insert into b values('paN');
1 row created.
SQL> insert into b values('pankaj');
insert into b values('pankaj')
ERROR at line 1:
ORA-20001: Name doesn't exists into a table
ORA-06512: at "SYSADM.TRG_BI_B", line 7
ORA-04088: error during execution of trigger 'SYSADM.TRG_BI_B'
SQL> select * from a;
NAME
Pan
SQL> select * from b;
NAME
pan
Pan
pAn
PAN
paN
SQL> You have to create same one for update.
Nicolas. -
Case INSENSITIVE Columns on Oracle
Hello Friends,
Good Monday for everyone....
I would like to ask you guys if there is a way to create a case INSENSITIVE Columns on Oracle. I used on Sqlserver before the COLLATE sintax, and I was able to make a columns (just that one) INSENSITIVE.
I'm using oracle 10gr2 on Windows plataform and herte is my nls_parameters. My ideia is to search on this column without the need of performing a function UPPER and LOWER and etc...
NLS_LANGUAGE BRAZILIAN PORTUGUESE
NLS_TERRITORY BRAZIL
NLS_CURRENCY Cr$
NLS_ISO_CURRENCY BRAZIL
NLS_NUMERIC_CHARACTERS ,.
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE BRAZILIAN PORTUGUESE
NLS_CHARACTERSET WE8MSWIN1252
NLS_SORT WEST_EUROPEAN
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY Cr$
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
tks a lot
KeenAPC wrote:
No, they mean a setting which makes "APC" or "apc" match "Apc".
There is nothing to be done on 10g, other than building a function based index on the column in question, so that any UPPER() searches are optimized.
Well, as Kamran Agayev already noted CI is available in 10g too. It also worth mentioning FBI creates a hidden column. Also, your statement
In 11g we have the option to set the NLS_SORT parameter so that any searches are case-insensitive (or indeed accent insensitive). Find out more.
is incomplete. NLS_SORT affects nothing but sort:
SQL> connect scott
Enter password: *****
Connected.
SQL> select * from v$version
2 /
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for 32-bit Windows: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 order by name
12 /
NAM
Joe
Max
Sam
joe
max
sam
6 rows selected.
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 where name = 'max'
12 /
NAM
max
SQL> alter session set nls_sort = binary_ci
2 /
Session altered.
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 order by name
12 /
NAM
Joe
joe
max
Max
Sam
sam
6 rows selected.
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 where name = 'max'
12 /
NAM
max
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 where name like 'm%'
12 /
NAM
max
SQL> select 'Max' name from dual union
2 select 'max' name from dual
3 /
NAM
Max
max
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select distinct name
10 from t
11 /
NAM
sam
Joe
joe
max
Sam
Max
6 rows selected.
SQL> As you can see, NLS_SORT alone works on sort but not on "searches". We also need to set NLS_COMP, which by default is BINARY. Prior to 10g R2 (I am not 100% sure, it could be prior 10g), the only NLS_COMP choice, besides BINARY, was ANSI. However, ANSI does not work with all comparison operators (e.g. does not work for LIKE, UNION, DISTINCT):
SQL> alter session set nls_sort = binary_ci
2 /
Session altered.
SQL> alter session set nls_comp=ansi
2 /
Session altered.
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 order by name
12 /
NAM
Joe
joe
max
Max
Sam
sam
6 rows selected.
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 where name = 'max'
12 /
NAM
Max
max
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 where name like 'm%'
12 /
NAM
max
SQL> select 'Max' name from dual union
2 select 'max' name from dual
3 /
NAM
Max
max
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select distinct name
10 from t
11 /
NAM
sam
Joe
joe
max
Sam
Max
6 rows selected.
SQL> Starting 10g R2 NLS_COMP can be set to LINGUISTIC, which will also work for LIKE and UNION but not for DISTINCT:
SQL> alter session set nls_sort = binary_ci
2 /
Session altered.
SQL> alter session set nls_comp=linguistic
2 /
Session altered.
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 order by name
12 /
NAM
Joe
joe
max
Max
Sam
sam
6 rows selected.
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 where name = 'max'
12 /
NAM
Max
max
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select name
10 from t
11 where name like 'm%'
12 /
NAM
Max
max
SQL> select 'Max' name from dual union
2 select 'max' name from dual
3 /
NAM
Max
SQL> with t as (
2 select 'Max' name from dual union all
3 select 'sam' name from dual union all
4 select 'Joe' name from dual union all
5 select 'max' name from dual union all
6 select 'joe' name from dual union all
7 select 'Sam' name from dual
8 )
9 select distinct name
10 from t
11 /
NAM
sam
Joe
joe
max
Sam
Max
6 rows selected.
SQL> However even LINGUISTIC does not work with:
• CLOB or NCLOB data types
• Object data types
• Table partitions
• Index-organized tables
SY. -
Make oracle database case insensitive
Hi All,
I am using oracle 10g EE as my back end database and front end is in C# .NET. I want to make my oracle database to perform any comparison case insensitively. I searched on the net and found several ways to achieve that
1. using upper function in procedures - can't afford
2. function index - can't afford
3. setting the session parameters
ALTER SESSION SET NLS_COMP=ANSI;
ALTER SESSION SET NLS_SORT=BINARY_CI;
The 3rd looks promising and can save lot of time. I have several question
1. Is there any way I can set these parameters from .NET?
2. Is there any way I can set once and will make only my database case insensitive?
any link, reference is highly appreciated.
Thanks,user10768079 wrote:
Thanks for your mail.
I want to apply these settings to my oracle database only. It should not affect other oracle database that exist with my db.
Thanks,It would make sense to issue "ALTER SESSION" statements during logon process from the .NET code instead of changing the entire database - which might affect other users. Judging by the way you have written this, I feel you are referring to a schema rather than database.
.NET surely has the capability to run "ALTER SESSION" statements. -
Case Insensitive Comparison in Oracle 9i
hi all
in Oracle 10g we have the following statement to enable case-INsensitive comparison:
ALTER SESSION SET nls_sort=binary_ai
do we have somthing like this in Oracle 9i to enable case-INsensitive comparison
thnx
Ashu :)Connected to:
Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
JServer Release 9.2.0.7.0 - Production
SQL> create table t as select 'télé' t from dual
union select 'TÉLÉ' from dual
union select 'tele' from dual
union select 'TELE' from dual
union select 'Bebe' from dual;
Table created.
SQL> alter session set nls_comp=ansi;
Session altered.
SQL> ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;
Session altered.
SQL> select * from t where t='tele';
T
TELE
TÉLÉ
tele
télé -
Intermittent oracle errors with case-insensitive searches
Hi
I have a table with several columns, two of them are indexed with oracle text.
When I ask queries containing "CONTAINS"-clauses against these columns everything works great. However I have a few other columns in table that I want to run case-insensitive comparisons with.
So I enable case-insensitivity:
ALTER SESSION SET NLS_COMP=LINGUISTIC
ALTER SESSION SET NLS_SORT=BINARY_CI
Now I suddenly start getting intermittent errors.
When I call a query:
SELECT
FROM
article_table at
WHERE
CONTAINS(searchfield , '%MEAT%') > 0
Sometimes it works, but sometimes I get:
ERROR
ORA-29902: ett fel inträffade när rutinen ODCIIndexStart() kördes
ORA-20000: Oracle Text error:
DRG-00100: internal error, arguments : [50935],[drpn.c],[1051],[],[]
DRG-00100: internal error, arguments : [50935],[drpnw.c],[601],[],[]
DRG-00100: internal error, arguments : [51002],[drwa.c],[594],[],[]
DRG-00100: internal error, arguments : [51028],[drwaw.c],[297],[0],[%MEAT%]
DRG-00100: internal error, arguments : [50401],[dreb.c],[1033],[],[]
ORA-00600: intern felkod, argument: [qernsRowP], [1], [], [], [], [], [], []
Anyone knows what is going on? Is this bug? Is there a fox for it?
Thanks for any help anyone can provide.
/KjellClearly that's a bug. Unless anyone here recognizes it and can point you to the bug/patch number I would strongly recomend you to take it to oracle support.
Incidently, doing a search for '%MEAT%' is usually a bad idea. Leading wildcards will disable the use of the index on the $I table, so unless you're using the SUBSTRING_INDEX option such searches will usually perform very badly. They shouldn't cause "internal errors", of course. -
Set Oracle to force searching string by upper case
Our application using Oracle 11.1 and Hibernate. Data store in our database in mix cases. many of our queries are like select first_name from persons where upper(first_name) like 'DAV%'
It returns Dave, DAVE, dave, David, DAVIE etcAccording to our developers, Hibernate does not send query select first_name from persons where upper(first_name) like 'DAV%' it only doesselect first_name from persons where first_name like 'DAV%'This only return DAVE and DAVID.
Question: Is there a way to set Oracle, at database level or table level, to always search by upper case, that is, select first_name from persons where first_name like 'DAV%' is converted to select first_name from persons where upper(first_name) like 'DAV%'Yes, there is a way. New in 10GR2....
You can set NLS_COMP.
http://www.orafaq.com/node/91
I tested it and it works well...
Example: SQL> alter session set NLS_COMP=ANSI;
Session altered.
SQL> alter session set NLS_SORT=BINARY_CI;
Session altered.
SQL> select name from names where name = 'Johny Jacobson';
NAME
Johny Jacobson
johny jacobson
JOHNY JACOBSONI hope you find this helpful.
ji li -
Phonetic and case insensitive searches in Oracle
Hi,
Do you know if Oracle 9i allows phonetic searches ? I've found several solutions for case insensitive searches, but I'd need phonetic searches too (like 'había' vs. 'havia' vs. 'habia', etc)
Any comment would be really welcome.
Thanks in advance,
Juanlookup soundex in the SQL Reference guide.
-
Case insensitive search and replace using ASP and Oracle database
I am interested in providing a case insensitive search and replace query in a Active server page. At present data is collected from a html form which passes the text values to a ASP page. The ASP page runs a search (select query) to find if the data is already in the Oracle database, if it isn't the ASP page runs sql (INSERT) to insert the record, if not the page returns a form indicating that the record already exists. At present we can convert the case of new records using the VB UCase() function. But can't do a insensitive search with the existing records. *The Query must be able to utilize ASP variables.
Any help would be much appreciated.
David Cheryk
nullI can't check your script right now since I'm not on Mac. I recommend you to use FindChangeByList script for CS4 instead (it works with CS3): http://forums.adobe.com/servlet/JiveServlet/download/2080627-12695/FindChangeByListCS4.zip together with Martin Fisher's: http://www.kasyan.ho.com.ua/downloads/RecordFindChange_CS3_Kas.zip
Use this script to record settings from Text and GREP tabs, then copy and paste them into FindChandgeList.txt file.
Or, optionally you can use this script: http://www.kasyan.ho.com.ua/find_change_by_queries.html.
Kasyan -
How to change Database server is case-insensitive setting at runtime
Is there a way to change any of the properties in Report Options > General Settings at runtime. Mainly the [Database server is case-insensitive] and [Perform grouping on server] settings. We are using the Crystal .Net X1 runtimes (11.5.9707.811). I have sesrched the forums with no luck so thought I'd try my luck here. Thankyou for your time.
Hi Simon,
Sorry, search for the function using the Object Browser in .NET. If you have Crsytal Reports XI R2 (11.5.x.xxxx) then you have it. Unless it's not a developer version. In whcih case you need to upgrade.
If you do have the Developer version then simply add the RAS assemblies to your project. Look in our samples above for more info on h ow to use RAS.
If you don't have the Developer version then your only options are to upgrade or manually change the report settings in the Designer.
Thank you
Don -
Error in a report after enabling case insensitive search in conn pool prop
Hi All,
I put the below code in connection pool's connection string to enable case insensitive search.
alter session set NLS_SORT=BINARY_CI
alter session set NLS_COMP=LINGUISTIC
After putting this code one of my report started giving the below error which was working fine otherwise.
Error Codes: OPR4ONWY:U9IM8TAC:OI2DL65P
State: HY000. Code: 10058. NQODBC SQL_STATE: HY000 nQSError: 10058 A general error has occurred. nQSError: 16001 ODBC error state: S1000 code: 1791 message: OracleODBCOraORA-01791: not a SELECTed expression. nQSError: 16001 ODBC error state: S1000 code: 1791 message: OracleODBCOraORA-01791: not a SELECTed expression. nQSError: 16015 SQL statement execution failed. (HY000)
The report gives error for the below divide condition when I select a column from a different dimension (eg: region)
COUNT(DISTINCT RMA.RMA)/COUNT(DISTINCT User."User Name")
Can anyone please throw a light why this is happening.Below is the SQL which is throwing error in OBIEE. It was working fine when I tried running it in toad:
select T1609.ATTRIB_05 as c1,
count(distinct T1609.ATTRIB_42) as c2,
TRUNC(T1159.FSCL_WEEK_START_DT) as c3
from
WC_DAY_D T1159 /* RMA_RECEIVED_DT(WC_DAY_D) */ ,
WC_RMA_D T571,
WC_FV_FA_D T1609,
WC_FV_FA_F T1679
where ( T571.ROW_WID = T1679.RMA_WID and T1159.ROW_WID = T1679.RMA_RECEIVED_WID and T1609.ROW_WID = T1679.FV_FA_WID and T1609.ATTRIB_39 <> 'FV' and (T571.STATUS_CD in ('2nd FA', '2nd FA Review', 'Closed')) and TRUNC(T1609.TODO_ACTL_END_DT) is not null and TRUNC(T1159.FSCL_WEEK_START_DT) between TIMESTAMP '2009-03-22 00:00:00' and TIMESTAMP '2009-04-12 00:00:00' )
group by T1609.ATTRIB_05, TRUNC(T1159.FSCL_WEEK_START_DT)
order by c3
-------------------- Query Status: Query Failed: [nQSError: 16001] ODBC error state: S1000 code: 1791 message: [Oracle][ODBC][Ora]ORA-01791: not a SELECTed expression.
[nQSError: 16001] ODBC error state: S1000 code: 1791 message: [Oracle][ODBC][Ora]ORA-01791: not a SELECTed expression.
[nQSError: 16015] SQL statement execution failed. -
In relation to switching on case insensitive queries using
alter session set NLS_COMP=LINGUISTIC;Can anyone answer the following?
>
Yes, it works.... but I can't for the life of me figure out how to build a linguistic index that the LIKE clause will actually use. Building an index thus, for example:
create index bin_ai on names(NLSSORT("NAME",'nls_sort=''BINARY_AI'''));
makes an index which does get used to good effect by queries such as
select name from names where name = 'Johny Jacobson';
but not by
select name from names where name like 'Johny%';
Hence, in a real-world test with 100,000 records, the LIKE query runs about 100 times slower than the '=' query (3 sec compared to 0.03 sec). Not very scalable. Is there a way to speed this up??
Also is it possible to set session variables such as nls_comp on a database/schema/user level?Hi,
select name from names where name like 'Johny%';Performance when using the SQL "like" clause can be tricky because the wildcard "%" operator can invalidate the index. For example a last_name index would be OK with a "like 'SMI%'" query, but unusable with "like '%SMI%'.
One obscure trick for indexing queries "like '%SON'" is to create a REVERSE index and them programmatically reverse the like clause to read "like 'NOS%'", effectively indexing on the other side of the text.
You might want to look at Oracle*text indexes, if your database has low DML:
http://www.dba-oracle.com/oracle_tips_like_sql_index.htm
If you are 10gr2:
Oracle 10g release 2 has now introduced a case insensitive search method for SQL that avoids index invalidation and unnecessary full-table scans. You can also employ Oracle text indexes to remove full-table scans when using the LIKE operator. Prior to Oracle10g release 2 case insensitive queries required special planning:
1 - Transform data in the query to make it case insensitive (note that this can invalidate indexes without a function-based index):
create index upper_full_name on customer ( upper(full_name));
select full_name from customer
where upper(full_name) = 'DON BURLESON';
2 - Use a trigger to transform the data to make it case insensitive (or store the data with the to_lower or to_upper BIF.
3 - Use Alter session commands:
alter session set NLS_COMP=ANSI;
alter session set NLS_SORT=GENERIC_BASELETTER;
select * from customer where full_name = 'Don Burleson'
Hope this helps. . .
Don Burleson
Oracle Press author -
Case insensitive search and index
I have to execute a case insentitive search.
I created this index on a not null field:
create index indx_prova on
table (nlssort(campo, 'NLS_SORT=BINARY_CI'));
The select is:
select * from tabella where campo like 'A storage%'
This select should retrive 5 records:
A storage ring for crystalline beam studies
a storage ring for crystalline beam studies
A Storage Ring for Crystalline Beam Studies
A storage ring for crystalline beam studies
A storage ring for crystalline beam studies
Instead I got only 3 records:
A storage ring for crystalline beam studies
A storage ring for crystalline beam studies
A storage ring for crystalline beam studies
So The query isn't case insensitive.
I can't set nls_sort=BINARY_CI and nls_comp=LINGUISTIC at level session.
Is there a solution.
Am I doing something wrog?I set alter session set nls_comp=LINGUISTIC; alter session set nls_sort=BINARY_CI;
I create this index:
create index titolo_indx on
table (nlssort(campo, 'NLS_SORT=BINARY_CI'));
If I execute this query:
select * from ri01_prodotti where titolo like 'A storage ring f%'
Oracle doesn't user the index.
SQL_ID 7yvspnyf96vp8, child number 0
select * from ri01_prodotti where titolo like 'A storage ring%'
Plan hash value: 350479533
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | | | 2020 (100)| |
|* 1 | TABLE ACCESS FULL| TABLE | 1 | 1365 | 2020 (1)| 00:00:25 |
Predicate Information (identified by operation id):
1 - filter("CAMPO" LIKE 'A storage ring%')
If I execute a query with =, oracle use index.
select * from table where campo ='A storage ring for crystalline beam studies'
SQL_ID 5jzr5nm6b37pq, child number 0
select * from ri01_prodotti where titolo ='A storage ring for crystalline beam
studies'
Plan hash value: 3866031381
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | | | 151 (100)| |
| 1 | TABLE ACCESS BY INDEX ROWID| RI01_PRODOTTI | 377 | 502K| 151 (0)| 00:00:02 |
|* 2 | INDEX RANGE SCAN | TITOLO_INDX | 151 | | 3 (0)| 00:00:01 |
Predicate Information (identified by operation id):
2 - access("RI01_PRODOTTI"."SYS_NC00078$"=HEXTORAW('612073746F726167652072696E6720
666F72206372797374616C6C696E65206265616D207374756469657300') )
Maybe you are looking for
-
I am trying to delete duplicate photos fron my events in i-photo but it deltes the photo entirely from all events. How do I keep them in the original events and delte the duplicates without sending them all to the trash?
-
Problem in Creating the Org Unit
Hi Experts, I am only using the FM RH_INSERT_INFTY to create an Org unit with Infotypes 1000,1001 & 1028. We have recently upgraded our system to SRM 7.0 from 4.0. Problem: The BP is not being created corresponding to the Org Unit. But, When i creat
-
Why does Windows 7 ignore iTunes 11 and go to sleep?
In all older iTunes versions, I could hit play and walk away. Since upgrading to iTunes 11, my computer enters sleep mode if I leave iTunes playing but unattended.
-
How to manage iphoto library location?
I can have iphoto library either in Mac's SSD (128GB) or external hard-disk. If the whole library is in SSD, it can't grow beyond 128GB or at max 512 GB). If I move the whole library to external hard-disk, I will have to mount it every time I need to
-
Running out of disk space -- best way to remove Xcode/Dashcode?
Hi, I am running out of disk space and looking for ways to get some back. Actually, the problem is that the update to Leopard is requiring 1.9GB of free space and I only have 1.5GB. So I figure I can get about 2-3GB back by removing XCode. Can someon