I really don't understand. 
The query "shipped" to your oracle instance will be exactly the same using 
DAL as the one using "bind variables".

The DAL just does binding for you (in the 90% of the cases, better)

If you want to retrieve from a table all records in one query, and you have 
a "large" list of "key values" to filter it with, you can do it only with 
two syntaxes....
either
select * from table where column in (1,2,3,4,5,6,....)

or
select * from table 
where 
column = 1
or
column = 2
or
column = 3
or 
column = 4



Now, every database has its own query planning, but as far as I know Oracle 
responds better to the first one than the latter.
For the sake of completeness,  MSSQL is more fun .... MSSQL 2000 to 2005 
without any SP performed better on the first, while 2005 sp2 to 2008 R2 
performs best with the latter ... Postgresql instead has similar times but 
from 8.4 to 9.1 there has been a steep improvement on it, etc etc etc

Binding with "in" won't get you where you want to go.... you have to 
prepare the "in" list as a "pre-quoted" string and pass that as a 
parameter, however, as I was saying, there will not be any difference on 
the query shipped to your db instance.

Same thing goes for the "or" method .....

For the sake of completeness #2, in web2py should resemble similarly to
mems = [1,2,3,4,5, ...]
q = [] # list of conditions
for c in mems:
    q.append[db.table1.field == c]
all_queries_in_or = reduce(lambda a,b: (a | b ), q)
result = db(all_queries_in_or).select()



-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to