Re: 9i: Check- constraint Upper(Column)
From: Andreas Mosmann <mosmann_at_expires-30-04-2008.news-group.org>
Date: Wed, 02 Apr 2008 17:45:21 +0200
Message-ID: <1207151121.77@user.newsoffice.de>
>> Carlos schrieb am 02.04.2008 in
>> <221a3638-5b82-4086-b097-8e06e50bd..._at_x41g2000hsb.googlegroups.com>:
>>
>>
>> I try to ensure, that it is impossible to insert/update records in the
>> way, that after this there are two records, that differ only by
>> BIG/little - Letters and the number of spaces
>>
>> example:
>>
>> CMyColumn
>> ----------
>> TeSt EnTrY
>>
>> It should be impossible to insert a record with CMyColumn > 'TEST ENTRY' or
>> 'test entry' or ' test entry ' ...
>>
>>
>> I tried it out:
>> CREATE UNIQUE INDEX MySchema.MyIndexName
>> ON MySchema.MyTable upper(trim((CLOGINNAME)))
>> TABLESPACE MyIndexTableSpace LOGGING;
>> No Problem to create that index, but, after it, still no problem to
>> insert f.e. 'TEST ENTRY'
>>
>> Any more idea?
>>
>> Thanks
>>
>> Andreas
>>
>> --
>> wenn email, dann AndreasMosmann <bei> web <punkt> de
you are particulary right. I did
CREATE UNIQUE INDEX MySchema.MyIndexName ON MySchema.MyTable upper(trim((CLOGINNAME))) TABLESPACE MyIndexTableSpace LOGGING; but in the Oracle Enterprise Manager I the index was only noted as trim(CLOGINNAME), the upper was not to be found. Now I turned the functions around and I can only find upper without trim.
Now it works with upper _and_ with trim, but not with upper(trim()) that means
' Test ' = ' TEST '
' Test' = 'Test '
but
'Test ' <> ' TEST'
I could write a wrapper function MyFunction as 'trim(upper())' but it sounds crazy ...
Date: Wed, 02 Apr 2008 17:45:21 +0200
Message-ID: <1207151121.77@user.newsoffice.de>
Carlos schrieb am 02.04.2008 in
<360af7b1-487f-4485-81d7-0d13abd40d3e_at_r9g2000prd.googlegroups.com>:
> On 2 abr, 16:54, Andreas Mosmann <mosm..._at_expires-30-04-2008.news- > group.org> wrote:
>> Carlos schrieb am 02.04.2008 in
>> <221a3638-5b82-4086-b097-8e06e50bd..._at_x41g2000hsb.googlegroups.com>:
>>
>>> Not sure about what you're trying to do, but a Function Based Unique >>> Index on (trim(upper(column))) may do the trick...
>>
>> I try to ensure, that it is impossible to insert/update records in the
>> way, that after this there are two records, that differ only by
>> BIG/little - Letters and the number of spaces
>>
>> example:
>>
>> CMyColumn
>> ----------
>> TeSt EnTrY
>>
>> It should be impossible to insert a record with CMyColumn > 'TEST ENTRY' or
>> 'test entry' or ' test entry ' ...
>>
>>> HTH.
>>
>> I tried it out:
>> CREATE UNIQUE INDEX MySchema.MyIndexName
>> ON MySchema.MyTable upper(trim((CLOGINNAME)))
>> TABLESPACE MyIndexTableSpace LOGGING;
>> No Problem to create that index, but, after it, still no problem to
>> insert f.e. 'TEST ENTRY'
>>
>> Any more idea?
>>
>>> Cheers.
>> Thanks
>>> Carlos.
>>
>> Andreas
>>
>> --
>> wenn email, dann AndreasMosmann <bei> web <punkt> de
> If you want to avoid INNER blanks, you should add some REPLACE() to > the index expression.
> But If you have successfully created the unique index, you shouldn't > be able to insert 'TEST ENTRY' if you have already inserted 'test > Entry'.
you are particulary right. I did
CREATE UNIQUE INDEX MySchema.MyIndexName ON MySchema.MyTable upper(trim((CLOGINNAME))) TABLESPACE MyIndexTableSpace LOGGING; but in the Oracle Enterprise Manager I the index was only noted as trim(CLOGINNAME), the upper was not to be found. Now I turned the functions around and I can only find upper without trim.
Now it works with upper _and_ with trim, but not with upper(trim()) that means
' Test ' = ' TEST '
' Test' = 'Test '
but
'Test ' <> ' TEST'
I could write a wrapper function MyFunction as 'trim(upper())' but it sounds crazy ...
Now I tried
CREATE UNIQUE INDEX MySchema.MyIndexName
ON MySchema.MyTable trim(upper(trim(CLOGINNAME)))
TABLESPACE MyIndexTableSpace LOGGING;
and it works ...
The outer function is ignored. Is this my mistake or an oracle bug?
> Cheers.
thank you
> Carlos.
Andreas Mosmann
-- wenn email, dann AndreasMosmann <bei> web <punkt> deReceived on Wed Apr 02 2008 - 10:45:21 CDT