Bei einem Projekt wird neu Oracle 11g als Datenbank verwendet. Bisher kam ausschliesslich Microsoft SQL Server (2000 & 2005) zum Einsatz. Dabei gibt es natürlich ein paar Punkte, die anders sind und für Verwirrung sorgen. Ein Punkt ist, dass die Standard MS SQL Server Collation caseinsensitive, d.h. Gross- und Kleinschreibweise ist dasselbe, ist. Bei der Standard Oracle Installation ist das natürlich anders.
Bisher gab es mehrere Ansätze.
1. UPPER verwenden
Es wird bei der WHERE Klausel ein UPPER() verwendet. Das wurde früher oft gemacht und funktioniert auch bei (allen) älteren Versionen.
SELECT
*
FROM
SCOTT.EMP
WHERE UPPER(ENAME) = UPPER(&1);
Das Problem hierbei ist aber, dass ein normaler Index nicht verwendet wird. Seit 8i gibt es aber einen sogenannten „function-based index“. Damit diese verwendet werden können muss folgendes erfüllt sein:
- Das System Privileg „query rewrite“ auf dem eigenen Schema
- Das System Privileg „global query“ auf Tabellen in anderen Schemas
- Damit der Optimizer function based indexes erkennt mü¨ssen folgende Session oder System Variablen gesetzt sein:
QUERY_REWRITE_ENABLED=TRUE
QUERY_REWRITE_INTEGRITY=TRUSTED - Der Cost Based Optimizer muss verwendet werden
Der Index wird dann folgendermassen erstellt:
CREATE INDEX UPPER_ENAME_IX on ENAME ( UPPER(ENAME) ) ;
Dieser Index wird dann aber nur für CASE INSENSITIVE Suchen verwendet, nicht für CASE SENSITIVE. Dazu müssten noch ein Index erstellt werden.
2. REGEXP_LIKE
Seit Version 10g gibt es regular expressions mit denen das Problem auch gelöst werden kanne.
SELECT *
FROM EMP
WHERE REGEXP_LIKE(ename,’James‘,’i‘);
3. NLS_SORT & NLS_COMP
ALTER SESSION SET NLS_COMP=ANSI;
ALTER SESSION SET NLS_SORT=BINARY_CI;
SELECT ENAME FROM EMP WHERE ENAME = ‚James‘;
Diese hat den Vorteil, dass existierende Indices verwendet werden und keine zusätliche Entwicklung notwendig wird.
ABER, …..
Dies funktioniert nicht mit LIKE. Bei LIKE kann ab 10gR2
NLS_COMP=LINGUISTIC;
verwendet werden. Dann klappts auch mit dem LIKE.
0 Antworten bis jetzt ↓
Es gibt keine Kommentare bis jetzt...Trete Sachen weg, die vom Formular runterfallen.
Hinterlasse ein Kommentar