<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mostly Anything &#187; Oracle</title>
	<atom:link href="http://blog.devnull.ch/tag/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.devnull.ch</link>
	<description>IT Blog über VMWare, SQL, Storage, Security und mehr.</description>
	<lastBuildDate>Thu, 20 Oct 2011 12:33:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Oracle SQL Queries case insensitive</title>
		<link>http://blog.devnull.ch/2009/01/14/oracle-sql-queries-case-insensitive/</link>
		<comments>http://blog.devnull.ch/2009/01/14/oracle-sql-queries-case-insensitive/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 12:32:13 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Case Insensitive]]></category>

		<guid isPermaLink="false">http://blog.devnull.ch/?p=35</guid>
		<description><![CDATA[Bei einem Projekt wird neu Oracle 11g als Datenbank verwendet. Bisher kam ausschliesslich Microsoft SQL Server (2000 &#38; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>Bei einem Projekt wird neu Oracle 11g als Datenbank verwendet. Bisher kam ausschliesslich Microsoft SQL Server (2000 &amp; 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.</p>
<p>Bisher gab es mehrere Ansätze.</p>
<p><strong>1. UPPER verwenden</strong><br />
Es wird bei der WHERE Klausel ein UPPER() verwendet. Das wurde früher oft gemacht und funktioniert auch bei (allen) älteren Versionen.</p>
<blockquote><p>SELECT<br />
*<br />
FROM<br />
SCOTT.EMP<br />
WHERE UPPER(ENAME) = UPPER(&amp;1);</p></blockquote>
<p>Das Problem hierbei ist aber, dass ein normaler Index nicht verwendet wird. Seit 8i gibt es aber einen sogenannten &#8220;function-based index&#8221;. Damit diese verwendet werden können muss folgendes erfüllt sein:</p>
<ul>
<li>Das System Privileg &#8220;query rewrite&#8221; auf dem eigenen Schema</li>
<li>Das System Privileg &#8220;global query&#8221; auf Tabellen in anderen Schemas</li>
<li>Damit der Optimizer function based indexes erkennt mü¨ssen folgende Session oder System Variablen gesetzt sein:<br />
QUERY_REWRITE_ENABLED=TRUE<br />
QUERY_REWRITE_INTEGRITY=TRUSTED</li>
<li>Der Cost Based Optimizer muss verwendet werden</li>
</ul>
<p>Der Index wird dann folgendermassen erstellt:</p>
<blockquote><p>CREATE INDEX UPPER_ENAME_IX on ENAME ( UPPER(ENAME) ) ;</p></blockquote>
<p>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.</p>
<p><strong>2. REGEXP_LIKE</strong></p>
<p>Seit Version 10g gibt es regular expressions mit denen das Problem auch gelöst werden kanne.</p>
<p>SELECT *</p>
<p>FROM EMP</p>
<p>WHERE REGEXP_LIKE(ename,&#8217;James&#8217;,'i&#8217;);</p>
<p><strong>3. NLS_SORT &amp; NLS_COMP</strong></p>
<blockquote><p>ALTER SESSION SET NLS_COMP=ANSI;</p>
<p>ALTER SESSION SET NLS_SORT=BINARY_CI;</p>
<p>SELECT ENAME FROM EMP WHERE ENAME = &#8216;James&#8217;;</p></blockquote>
<p>Diese hat den Vorteil, dass existierende Indices verwendet werden und keine zusätliche Entwicklung notwendig wird.</p>
<p>ABER, &#8230;..</p>
<p>Dies funktioniert nicht mit LIKE. Bei LIKE kann ab 10gR2</p>
<blockquote><p>NLS_COMP=LINGUISTIC;</p></blockquote>
<p>verwendet werden. Dann klappts auch mit dem LIKE.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.devnull.ch/2009/01/14/oracle-sql-queries-case-insensitive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

