Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Transform text for IN clause?

Re: Transform text for IN clause?

From: Angrydot <spam_at_spamme.com>
Date: Thu, 10 Mar 2005 06:40:30 -0500
Message-ID: <rO2dnWKXKIi0r63fRVn-oQ@comcast.com>


Mark C. Stock wrote:
> "Angrydot" <spam_at_spamme.com> wrote in message
> news:w9-dnXBQ0N7UarPfRVn-uA_at_comcast.com...
>

>>Greetings,
>>
>>I have a text variable A = 't1:t2:t3' that I would like to use in the SQL 
>>IN clause (i.e. SELECT * FROM X WHERE c IN (A);).
>>
>>I tried REPLACE and TRANSFORM with no success. For example IN 
>>(REPLACE(a,':',''',''')).
>>
>>Is there a way to do this directly in the SQL statement and not using 
>>PL/SQL or VB?
>>
>>TIA

>
>
> for SQL in general, the IN operator expects to work on a list ... either an
> explicit list of expressions, or a list returned by a subquery
>
> so, for any RDBMS, and any version, you cannot use a single scalar variable
> that has a delimited list embedded in it and expect the IN operator to parse
> out its elements
>
> so, you have to transform the scalar to a table using a custom function
> (quite doable in Oracle, from, IIRC, 8i on -- using a piplined table
> function) or use a different approach
>
> without writing a special function to transform the scalar variable, you
> could try a syntax like
>
> WHERE instr( ':'|| :A || ':' , ':' || c || ':) > 0
>
> which wraps your variable A in semicolons -- ie. it becomes ':t1:t2:t3:' --
> and then checks if the value of column c, also wrapped in semi-coluns,
> occurs in the string
>
> so for a c value of 't1', the INSTR function will check if ':t1:' occurs in
> ':t1:t2:t3:', and if it does, return its position (hence, the >0 check)
>
> there are limitations to this technique -- the separator character (':')
> cannot occur in the data, and performance will be an issue
>
> ++ mcs
>
>

Thank you. I will test the performance of INSTR and a separate function and report back. Received on Thu Mar 10 2005 - 05:40:30 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US