Re: SQL escape games
Date: Mon, 30 Aug 2010 10:25:33 -0700
Message-ID: <AANLkTinu1GJL1MbedBu7L7H5thfJeYo7V+O7Ln7V3-Kh_at_mail.gmail.com>
Comments inline:
On Mon, Aug 30, 2010 at 9:20 AM, Martin Klier <usn_at_usn-it.de> wrote:
> Correct result:
>
> SQL> set escape '/'
> SQL> Select count(*) From table Where Mailordernocustomerupper Like
> '%GF/_2%' And Warehousesiteid In (4) And Status<99 And Clientid In (6);
>
>
So this one is finding a literal '/' in the data.
eg <any number of any characters>GF/<any single character>2<any number of
any characters>
> Wrong result:
>
> SQL> set escape off
> SQL> Select count(*) From table Where Mailordernocustomerupper Like
> '%GF/_2%' escape '/' And Warehousesiteid In (4) And Status<99 And
> Clientid In (6);
>
>
... and this one is doing something slightly different
it is finding the Pattern 'GF_2' in the middle of a string.
Normally the '_' character is a single character wildcard for LIKE,
but this SQL has identified the '_' as a literal character, not
to be used as a wildcard.
eg <any number of any characters>GF_2<any number of any characters>
The 'set escape' command sets the escape character to be used in sqlplus, and has no effect on SQL.
From the sqlplus docs:
> You can use the escape character before the substitution character (set
> through SET DEFINE) to indicate that SQL*Plus should treat the substitution
> character as an ordinary character rather than as a request for variable
> substitution.
The SQL must contain the 'escape' clause along with the escape character.
HTH
Jared Still
Certifiable Oracle DBA and Part Time Perl Evangelist
Oracle Blog: http://jkstill.blogspot.com
Home Page: http://jaredstill.com
-- http://www.freelists.org/webpage/oracle-lReceived on Mon Aug 30 2010 - 12:25:33 CDT