Why we have give in where clause 1=1
hi,
why we have give in select statement ------ where clause 1=1 and follow by conditions ...
thanks in advance ....
* moderators hat on *
Naveed_CG wrote:
Report abuse about this sb92075 user by clicking the small yellow icon on his reply ... he is wasting the time and valuable learning and suggestions from others.It is not abuse, it's a valid point.
The forum is a community of volunteers who are willing to help people who have genuine issues and who provide proper feedback.
The OP has been a member for nearly 2 years and has 225 posts to their name. Of those 225 posts, 143 of them are questions they've asked, which a quick bit of easy mental maths tells you that for at least some of those questions they've asked the question and never responded to any of the answers they've been given. On top of that, of the 143 questions, 112 of them are still showing as unresolved, indicating that they are either not asking questions in a way that people can answer them, or that they are not marking their questions as answered when they receive an answer. There's a thing called Forum Etiquette, and this member is clearly showing that they are not following it.
Also, sb92075 is not preventing anyone else from providing valuable suggestions or stopping anyone from learning. If anything, asking questions to which the answers can be found easily on the internet ( http://lmgtfy.com/?q=where+1%3D1 ) could very easily be seen as an abuse and waste of the volunteers time, and detracting from other members with valid issues to be resolved.
* moderators hat off *
Similar Messages
-
Hi everyone,
Is there a way to use MAX in the WHERE clause as follows:
where . . .
and max(dte_end) between x.dte_pa_auth_eff and :il_current_date
and . . . .
any help would be greatly appreciated.
ThanksHere is an example:
I am trying to compare two dates
I have the following values:
SAK_RECIP DTE_EFFECTIVE DTE_END
113013 20050601 20051231
113013 20060101 22991231
113013 20050101 20050531
113013 20040601 20041231
I am joining two tables using the sak_recip, and i get all those rows, but i only want to compare the latest dte_end. but it is comparing all the dte_end.
Hope this helps to understand my problem.
Thanks -
Hello,
I am using JPA in my app and I am confused because of a select that is returning data as I didn't have anything in my where clause.
Select A (with problems):
Query q = em.createQuery(
" Select distinct p "+
" From Subgrupo sub,"+
" UsuarioSubgrupo usb," +
" Usuario u, "+
" Grupo g, "+
" Projeto p "+
" where "+
" sub.cdGrupo = g.cdGrupo and "+
" g.cdProje = p.cdProje and "+
" g.stAdmin = 1 and " +
" sub.cdSubgr = usb.cdSubgr and " +
" usb.cdUsuar = u.cdUsuar and " +
" u.cdUsuar = 1"
Select B (almost OK):
Query q = em.createQuery(
" Select p.dsProje "+ // the only difference
" From Subgrupo sub,"+
" UsuarioSubgrupo usb," +
" Usuario u, "+
" Grupo g, "+
" Projeto p "+
" where "+
" sub.cdGrupo = g.cdGrupo and "+
" g.cdProje = p.cdProje and "+
" g.stAdmin = 1 and " +
" sub.cdSubgr = usb.cdSubgr and " +
" usb.cdUsuar = u.cdUsuar and " +
" u.cdUsuar = 1"
In the second select, I've got the rows according with where clause and I cannot understand how the fact of selecting an objetc Projeto (p) (select A) can make such a "mess" avoiding the rules of the where clause.
Could someone give me a help about this problem?
I'll be glad with any help!!
[]'s
Alex
!_Let's share ideas_!Hi,
The issue is I am getting differents results from selects A and B and both have the same where clause.
I have done this:
Query q = em.createQuery(
" SELECT NEW entity.Projeto (p.dsProje, p.cdProje) "+
" From Subgrupo sub, "+
" UsuarioSubgrupo usb," +
" Usuario u, "+
" Grupo g, "+
" Projeto p "+
" where sub.cdGrupo = g.cdGrupo "+
" and g.cdProje = p.cdProje "+
" and g.stAdmin = 1 "+
" and sub.cdSubgr = usb.cdSubgr "+
" and usb.cdUsuar = u.cdUsuar "+
" and u.cdUsuar = " + cdUsuar
I am getting what I need, but the reason why a simple select p does not work I don't know.
This select is not generate by TopLink.
Cheers! -
Dynamically changing the WHERE clause in detail VO in Master Detail
Hi, I want to develop a search functionality, results will be in a table, which will have an inline table displaying the details per row found.
I have a MD defined trough viewlink. I do change the master VO at runtime (set the entire SQL), based on the criteria entered by the user.
Is there a way to change the VO at the detail end of the link at runtime - that is what I haven't been able to do.
I have read that the ADF framework creates internal VO for each master row, whenever accessed trough accessor (which is not I am trying to do). I haven't been able to find a way to get a hold of the REAL VO at the detail end and have its WHERE clause changed.
Changes to the "VO instance in AM" (same one used as a definition in the detail end in the ViewLink def) does not seem to reflect the detail VO.
I have a MasterView, DetailView, MasterDetailLink (MasterView->DetailView).
MasterDetailLink is used to create a table with inline detail table. At runtime:
1.get MasterView (from AM), change query trough setQuesry() - works.
2.get DetailView (from AM), change query trough addWhereClause() - does not work (no exceptions) - the results I am getting DO NOT reflect the conditions of the where clause, I mean the clause have not been addedd.
I 've looked at the logs (debug enabled) and it seems to me that there no "activities" related to the detail VO, even after the where clause of the VO from step 2 is changed.
Looks like there is a separate VO which I would like to get a hold of :)
Thanks, and sorry for the long explanationAfter you have added a new where clause on the detail VO, try re-executing VO's query by DetailVO.executeQuery()
If it doesn't work try re-executing the MasterVO's query after you have added the where clause on the detail -
Pass values dynamically to the WHERE clause in SFAPI
Hi there
We have a requirement to pass values dynamically (in the run-time of the interface) to the WHERE condition to our SFAPI query.
Eg -
SELECT person, personal_information, address_information, phone_information, email_information, employment_information, job_information, compensation_information, paycompensation_recurring, paycompensation_non_recurring, job_relation, accompanying_dependent, global_assignment_information, direct_deposit, national_id_card, person_relation
FROM CompoundEmployee
WHERE last_modified_on >= to_date('LAST_RUN_DATE') AND
last_modified_on <= to_date('CURRENT_RUN_TIME')
LAST_RUN_DATE is stored in a custom entity for which we execute another OData query. The custom entity is updated with the CURRENT_RUN_TIME once the interface has been executed successfully. So the next time the interface is run it picks up the LAST_RUN_DATE from the custom OData entity.
SAP PO has the functionality to run a dynamic query for OData adapters. Refer to Note 2051137 - PI Successfactors adapter : Dynamic odata query and single synchronous sfapi query
Eg - select fields from position (this is what you state in OData query path in the comms channel; this is static); and you have an advanced tab in comms channel where you mention dynamicquery and set it to true (this points to a XSD which has the keyword TOP, SKIP & FILTER in it).
This gets the filter values passed from the BPM from another query (from a OData cust_table).
So the whole query is - select fields from position filter field a = x field b = y etc. Field a field b are fields in position that are you passing values x and y in run time of the interface.
SAP PO also has the advanced tab feature for SFAPI for dynamic query.
Question is -
how to use it?
has anyone implemented this before?
What does XSD will look like?
How do we pass values to the fields to the Where clause for SFAPI.
Any ideas are welcome!
Regards
Arijit DasAfter you have added a new where clause on the detail VO, try re-executing VO's query by DetailVO.executeQuery()
If it doesn't work try re-executing the MasterVO's query after you have added the where clause on the detail -
I'm running Forms 6i client/server.
I have defined a where clause in the Property Palette for a Data Block.
What I like to do is to extend the where clause with a subquery, but
how can this be done? I mean, should I put the code in a trigger, which trigger?
Regards
Roarsimple where clause with sub_query
My block has name is dc_gmod. In the where pallete I put the text (and the all is work good!!!):
exists
select 1 from ttt.xxxxx_table v
where (dc_gmod.cd_gmod = v.cd_gmod)
and
(instr(:fst.tmp_nm,cd_place,1) > 0
or
cd_place IN
(select U_UNIT from ttt.xxxxxxxxx_tabe
where RG_U = :QA.RG_UNIT_RUN
AND SID = :QA.SID
AND SERIAL# = :QA.SERIAL
1.The dc_gmod.cd_gmod - is full name my block_name and item_name.
2. The ttt.xxxxx_table is full name of my table what is source for block dc_gmod
3. The cd_place is ITEM of BLOCK dc_gmod -
Where clause and order by to DAO classes
Hi
Is it ok(I mean design wise) to pass the 'where clause' conditions and order by clause as a parameter to the method of DAO class?Well, I would suggest you write seperate methods in your dao , one to select data without the where clause and one to select data with the where clause thrown in. If you have different 'where' clauses for selecting different kinds of data, have that many dao methods. The dao methods being specific know exactly what is the data that's coming in.
Lets assume you have a list of purchase orders and each purchase order is indetified by a unique id called PURCHASE_ORDER_ID.
1. The following code would populate a purchase order's details given an id.
private statis final String QUERY_1 = "select * from PURCHASE_ORDERS where PURCHASE_ORDER_ID = ? ";
PurchaseOrderModel getPurchaseOrderData(long poId){
//get a prepared statement from your connection
PreparedStatement pst = conn.prepareStatement(QUERY_1);
//set the poId passed as params to your query
pst.setLong(1, poId);
ResultSet rs = pst.executeQuery();
if(rs.next()){
//populate data into a model
finally{
//clean up resources
return model;
}2. The following code would return a list of PurchaseOrderModel's whose shipping date falls between a set of dates selected by the user.
private statis final String QUERY_2 = "select * from PURCHASE_ORDERS where SHIPPING_DATE between ? and ? ";
PurchaseOrderModel getPurchaseOrdersBetweenDates(list bindValues){
//get a prepared statement from your connection
PreparedStatement pst = conn.prepareStatement(QUERY_1);
//set the dates passed as params to your query
//we know that the List ought to contain only 2 dates
pst.setDate(1, (Date)bindValues.get(0));
pst.setDate(2, (Date)bindValues.get(1));
ResultSet rs = pst.executeQuery();
if(rs.next()){
//iterate and populate data into a model
//add model to a list
finally{
//clean up resources
return list;
3. This is more interesting - the dao method searches a list of Purchase Orders starting with a set of specific words. The words themselves may be one or many. This means that the number of '?' in your prepared statement may be dynamic. Each element of the list is a String that contains the start substring of a purcahse order name. For example - the list may contain elements like ["a", "ab", "c", "gh"] and the dao method returns all purchase order starting with these names.
private statis final String QUERY_3 = "select * from PURCHASE_ORDERS where ";
PurchaseOrderModel getPurchaseOrderNameMatches(list bindValues){
//construct the query dynamically
StringBuffer query = new StringBuffer(QUERY_3);
int count = 0;
for(Iterator itr = bindValues.iterator(); itr.hasNext();;){
String value = (String)itr.next();
query.append ("name like 'value%' ");
if (count != 0 and (count+1 != bindValues.length)){
query.append(" or ");
count ++;
//get a prepared statement from your connection
PreparedStatement pst = conn.prepareStatement(query.toString());
ResultSet rs = pst.executeQuery();
if(rs.next()){
//iterate and populate data into a model
//add model to a list
finally{
//clean up resources
return list;
To sum up,
1. You need as many methods as you have different kinds of searches (one method for each kind of 'where' clause).
2. The ejb/business layer would examine the data and decide on which method to call.
3. Increases coding effort, but makes the code clean and readable. Each layer does it's job. Thus we dont have ejbs forming 'where' clauses and so on.
Having said that, it really is your decision - you should take into consideration the following factors -
1. How big is the project ? If its a huge codebase developed by many people, then segregate the responsibilities clearly in each layer as I have outlined. For a small scale project, you could go with your approach.
2. Whats the take on maintenance and future add-ons ? Do you see the codebase growing with time ?
3. Is your project a commercial one - is it a product that needs to be maintained or is it a one-off development - develop once and you are done with it.
4. What are the design considerations ? Is somebody going to audit code for quality ? Or is it a academic one ?
You should take into account all these before deciding to go one way or the other.
A general thumb rule should be that you should be convinced that your code readable (maintainable), scalable and efficient. Anything that you do towards these ends is good code/design despite what people/books/patterns say, IMO.
cheers,
ram. -
Order by in subquery ignores where clause
Following the suggestion to simulate "select first," I did the following:
select e.*,
(select * from (select dname from scott.dept d where d.deptno = e.deptno order by dname) t where rownum = 1) dname
from scott.EMP e;
The "order by dname" however, cause the subquery to ignore the where clause.
I know in this case, I can use a first_value() or min(), and it'll always return 1 row b/c of the PK. Still, any idea why it would ignore the where clause in the presence of an order by?
ThanksMy output:
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Mar 31 13:50:54 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select (select dname from (select dname from scott.dept d where d.deptno = e.deptno order by dname) t where rownum = 1) dname, e.* from scott.EMP e;
DNAME EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
ACCOUNTING 7369 SMITH CLERK 7902 17-DEC-80 800 20
ACCOUNTING 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
ACCOUNTING 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
ACCOUNTING 7566 JONES MANAGER 7839 02-APR-81 2975 20
ACCOUNTING 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
ACCOUNTING 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
ACCOUNTING 7782 CLARK MANAGER 7839 09-JUN-81 2450 10
ACCOUNTING 7788 SCOTT ANALYST 7566 19-APR-87 3000 20
ACCOUNTING 7839 KING PRESIDENT 17-NOV-81 5000 10
ACCOUNTING 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
ACCOUNTING 7876 ADAMS CLERK 7788 23-MAY-87 1100 20
ACCOUNTING 7900 JAMES CLERK 7698 03-DEC-81 950 30
ACCOUNTING 7902 FORD ANALYST 7566 03-DEC-81 3000 20
ACCOUNTING 7934 MILLER CLERK 7782 23-JAN-82 1300 10
14 rows selected.
SQL> select (select dname from (select dname from scott.dept d where d.deptno = e.deptno) t where rownum = 1) dname, e.* from scott.EMP e;
DNAME EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
RESEARCH 7369 SMITH CLERK 7902 17-DEC-80 800 20
SALES 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
SALES 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
RESEARCH 7566 JONES MANAGER 7839 02-APR-81 2975 20
SALES 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
SALES 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
ACCOUNTING 7782 CLARK MANAGER 7839 09-JUN-81 2450 10
RESEARCH 7788 SCOTT ANALYST 7566 19-APR-87 3000 20
ACCOUNTING 7839 KING PRESIDENT 17-NOV-81 5000 10
SALES 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
RESEARCH 7876 ADAMS CLERK 7788 23-MAY-87 1100 20
SALES 7900 JAMES CLERK 7698 03-DEC-81 950 30
RESEARCH 7902 FORD ANALYST 7566 03-DEC-81 3000 20
ACCOUNTING 7934 MILLER CLERK 7782 23-JAN-82 1300 10
14 rows selected.
SQL> -
ADF dynamic where clause for VO query using BC
I'm hoping someone can help me out. I have a read only view object that I want to filter results based on some user choices. For example the user may want to see all results or they may only want to see a much smaller subset. This is for an error dashboard, the smaller subset maybe by application or maybe by application and by error severity. I think I can use a dynamic where clause but I'm not sure, Can someone get me started down the right path, or post an example that I can see.
Hi user,
You can use a dynamic where clause for this, but maybe there is a more practical option. Maybe you can have a fixed where clause, but using a bind parameter, like:
vo.application like :applicationParam. This makes an executeWithParams method available that you can call from your page, and use in the bindings. This parameter you can populate with the results of for example a poplist, with a default value of '%'.
When you do want to use a dynamic where clause, you will need to add a method to the java code of your application module, and make this method available for the client. In this method, you can use findViewObject to retrieve your VO, use VO.setWhereClause to set the whereclause to what you want, and then call VO.executeQuery. This method can then again be called from the page.
Success,
Jeroen van Veldhuizen -
Replace Where Clause in a Report?
Is there any way to programmatically replace the Where clause on a report?
Hi,
You can use QBE reports. This way you can give the where clause in the customization form.
Thanks,
Sharmila -
DECODE inside the WHERE clause
Hello All:
I can't get the DECODE statement to work inside my WHERE clause. I have read the information on
tahiti.oracle.com
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/functions049.htm#i1017437
But still can't get it working. Originally I had it working as dynamic SQL and then execute that string, but I am not allowed to use dynamic SQL and need to use "Real" PL/SQL.
I have the following WHERE clause (more info after the WHERE clause)
WHERE
a.ebiz_asn_no(+) = te.ebiz_cntrl_no
AND w.ebiz_work_no(+) = te.ebiz_cntrl_no
AND o.ebiz_ord_no(+) = ebiz_cntrl_no
AND t.ebiz_trailer_no(+) = te.ebiz_trailer_no
AND ms.ebiz_sku_no(+) = te.ebiz_sku_no
AND NVL(ms.ebiz_sku_no, -1) = NVL(p_SKU, nvl(ms.ebiz_sku_no, -1))
AND tl.ebiz_lp_no(+) = te.ebiz_lp_no
AND NVL(te.ebiz_lp_no, -1) = NVL(p_LP, nvl(te.ebiz_lp_no, -1))
AND eu.ebiz_user_no(+) = te.act_ebiz_user_no
AND NVL(te.act_ebiz_user_no, -1) = NVL(p_UserID, NVL(te.act_ebiz_user_no, -1))
AND NVL(te.begin_location, '~') = NVL(p_BeginLocation, NVL(te.begin_location, '~'))
AND NVL(te.end_location, '~') = NVL(p_EndLocation, NVL(te.end_location, '~'))
AND te.comp_id = p_CompID
AND te.site_id = p_SiteID
AND INSTR('' || p_TaskType || '', te.task_type) > 0
AND NVL(task_priority, -1) = NVL(p_Priority, NVL(task_priority, -1))
AND NVL(te.ebiz_cntrl_no, -1) = DECODE(te.task_type, 'IULD', DECODE(p_Order, null, te.ebiz_cntrl_no, ebiz_po2asn.get_ebiz_po_no(p_Order)), NVL(p_Order, NVL
(te.ebiz_cntrl_no,-1)))
AND NVL(te.batch_no,'~') = NVL(p_Batch, NVL(te.batch_no, '~'))
AND NVL(te.ebiz_wave_no, -1) = NVL(p_Wave, NVL(te.ebiz_wave_no, -1))
|| whereClauseStatus
|| whereClauseFromDate
|| whereClauseToDate;As you can see, originally I was appending values of "whereClauseStatus, whereClauseFromDate, whereClauseToDate" and this was set with the following PL/SQL code:
IF(p_TaskStatus = 'C') THEN
-- Set From Date Clause
IF(p_FromShipDate IS NOT NULL) THEN
whereClauseFromDate := ' AND TRUNC(te.act_end_date) >= TO_DATE(''' || p_FromShipDate || ''',''MM/dd/yyyy'') ';
END IF;
-- Set To Date Clause
IF (p_ToShipDate IS NOT NULL) THEN
whereClauseToDate := ' AND TRUNC(te.act_end_date) <= TO_DATE(''' || p_ToShipDate || ''',''MM/dd/yyyy'') ';
END IF;
ELSE
-- Incomplete and All statuses are filtered on the currdate
-- Set From Date Clause
IF(p_FromShipDate IS NOT NULL) THEN
whereClauseFromDate := ' AND TRUNC(te.currdate) >= TO_DATE(''' || p_FromShipDate || ''',''MM/dd/yyyy'') ';
END IF;
-- Set To Date Clause
IF (p_ToShipDate IS NOT NULL) THEN
whereClauseToDate := ' AND TRUNC(te.currdate) <= TO_DATE(''' || p_ToShipDate || ''',''MM/dd/yyyy'') ';
END IF;
END IF;
IF (p_TaskStatus = 'I') THEN
whereClauseStatus := ' AND act_end_date IS NULL ';
ELSIF (p_TaskStatus = 'C') THEN
whereClauseStatus := ' AND act_end_date IS NOT NULL ';
ELSE
whereClauseStatus := '';
END IF;I am having serious issues getting the DECODE statement to replace the three appended variables.
Any help would be greatly appreciated.
Thanks
Andy
Edited by: BluShadow on 02-Aug-2011 15:11
added {noformat}{noformat} tags for clarity. Please read {message:id=9360002} and learn to do this yourself.I'm going to take a wild stab in the dark and suggest that this may be what you are looking for...
WHERE
a.ebiz_asn_no(+) = te.ebiz_cntrl_no
AND w.ebiz_work_no(+) = te.ebiz_cntrl_no
AND o.ebiz_ord_no(+) = ebiz_cntrl_no
AND t.ebiz_trailer_no(+) = te.ebiz_trailer_no
AND ms.ebiz_sku_no(+) = te.ebiz_sku_no
AND NVL(ms.ebiz_sku_no, -1) = NVL(p_SKU, nvl(ms.ebiz_sku_no, -1))
AND tl.ebiz_lp_no(+) = te.ebiz_lp_no
AND NVL(te.ebiz_lp_no, -1) = NVL(p_LP, nvl(te.ebiz_lp_no, -1))
AND eu.ebiz_user_no(+) = te.act_ebiz_user_no
AND NVL(te.act_ebiz_user_no, -1) = NVL(p_UserID, NVL(te.act_ebiz_user_no, -1))
AND NVL(te.begin_location, '~') = NVL(p_BeginLocation, NVL(te.begin_location, '~'))
AND NVL(te.end_location, '~') = NVL(p_EndLocation, NVL(te.end_location, '~'))
AND te.comp_id = p_CompID
AND te.site_id = p_SiteID
AND INSTR('' || p_TaskType || '', te.task_type) > 0
AND NVL(task_priority, -1) = NVL(p_Priority, NVL(task_priority, -1))
AND NVL(te.ebiz_cntrl_no, -1) = DECODE(te.task_type, 'IULD', DECODE(p_Order, null, te.ebiz_cntrl_no, ebiz_po2asn.get_ebiz_po_no(p_Order)), NVL(p_Order, NVL
(te.ebiz_cntrl_no,-1)))
AND NVL(te.batch_no,'~') = NVL(p_Batch, NVL(te.batch_no, '~'))
AND NVL(te.ebiz_wave_no, -1) = NVL(p_Wave, NVL(te.ebiz_wave_no, -1))
AND TRUNC(te.act_end_date) >= NVL(TO_DATE(p_FromShipDate,'MM/dd/yyyy'),TRUNC(te.act_end_date))
AND TRUNC(te.act_end_date) <= NVL(TO_DATE(p_ToShipDate,'MM/dd/yyyy'),TRUNC(tw.act_end_date))
AND TRUNC(te.currdate) >= NVL(TO_DATE(p_FromShipDate,'MM/dd/yyyy'),TRUNC(te.currdate))
AND TRUNC(te.currdate) <= NVL(TO_DATE(p_ToShipDate,'MM/dd/yyyy'),TRUNC(te.currdate))
AND ( (act_end_date IS NULL AND p_TaskStatus = 'I')
OR (act_end_date IS NOT NULL AND p_TaskStatus = 'C')
OR p_TaskStatus NOT IN ('I','C')
)Edited by: BluShadow on 02-Aug-2011 16:27
missed the last clause. oops. -
I am working on some customizations for a client. I'm trying to query PoReqDistribuitionsVO for a particluar Requisition Line id and it is not working. I've looked at the queries both in the VO definition and using the VO getquery method and I noticed that the .getquery() method returns the query with where clause appeneded even if I execute .setWhereClause(null) just prior to it.
The where clause is filtering where the requistion_line_id = :1
I have two questions.
1) where is this where clausing coming from since it is not part of the VO definition
2) How can I set the bind parameter on this mystery where clause?
If I use the VO.setWhereClauseParams() method, I get a sql error of no such bind variable exists.
Thanks in advance for any help.1) You can dynamically set the where clase from the AM or one of the method initQuery() inside the VOimpl.java.
This is a simple step to set where clasue dynamically.
public void initQuery(String yourid )
setWhereClauseParams(null); // Always reset
setWhereClause("Pid = :1");
setWhereClauseParam(0, "123");
executeQuery();
This initQuery is called from your Am method, for example vo.initQuery() instead of executing vo.executeQuery().
2) The reson you are getting error becuase , becuase you may have not set where clause before setWhereClauseParam. See example above.
One more thing to be careful is the indexing of the bind parameter, in case of setWhereClause() , the index start with 1 and in cae of setWhereClauseParam() , index start with 0.
hope this help. -
Can't have aggregate function in WHERE clause clause
Dear all,
I've created object in BO XI 3.1 Designer with following criterias:
http://img4.imageshack.us/img4/833/20111201124314.th.jpg
It is a simple number - 1,2,3,4,5.
Now I need to use this object as a criteria for WHERE function in another object.
http://img607.imageshack.us/img607/1543/20111201124717.th.jpg
I receive an error "Can't have aggregate function in WHERE clause <clause>"
How can I overcome this?
P.S. I'm sorry in advance if such topic already exist - I didn't found one.
Edited by: Ashot Antonyan on Dec 1, 2011 9:50 AM
Edited by: Ashot Antonyan on Dec 1, 2011 9:51 AMHi,
You will have to use Sub query to achieve this. Give more details on what is available and what you need then i could help you out with the complete solution.
Thanks,
Ravichandra K -
Why a table full scan when I've got the PK in the WHERE clause?
There is a very complex query that I need to optimize in an Oracle 10gR2 environment. I am deconstructing it into layers to see what is causing the first bottleneck. The innermost portion is fine, with an explain plan cost of 54. With a typical value for the bind variable, it returns 125 zero_id values. There are over 100,000 rows in table T_ONE in my test database, but my customer has over one million rows in their production instance.
WITH t_merged_id AS (SELECT DISTINCT zero_id FROM t_zero WHERE NVL(column2, zero_id) = :i_id)
SELECT t_one.one_id
FROM t_one
INNER JOIN t_two
ON t_one.column1 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_two
ON t_one.column2 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_three
ON t_one.column3 = t_three.three_id
INNER JOIN t_merged_id
ON t_three.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_four
ON t_one.column4 = t_four.four_id
INNER JOIN t_two
ON t_four.column1 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.two_id = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one INNER JOIN t_merged_id ON t_one.column5 = t_merged_id.zero_id
UNION
SELECT t_one.one_id
FROM t_one INNER JOIN t_merged_id ON t_one.column6 = t_merged_id.zero_idHowever, the next step is to obtain a bunch of columns from T_ONE for each of those ONE_ID values. Adding that looks like the following, which causes a table full scan on T_ONE (and an explain plan cost over 1,500 for this query in my test system) and it takes far too long to return the results.
SELECT t_one.*
FROM t_one
INNER JOIN
(--This is the start of the query shown above
WITH t_merged_id AS (SELECT DISTINCT zero_id FROM t_zero WHERE NVL(column2, zero_id) = :i_id)
SELECT t_one.one_id
FROM t_one
INNER JOIN t_two
ON t_one.column1 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_two
ON t_one.column2 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_three
ON t_one.column3 = t_three.three_id
INNER JOIN t_merged_id
ON t_three.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_four
ON t_one.column4 = t_four.four_id
INNER JOIN t_two
ON t_four.column1 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.two_id = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one INNER JOIN t_merged_id ON t_one.column5 = t_merged_id.zero_id
UNION
SELECT t_one.one_id
FROM t_one INNER JOIN t_merged_id ON t_one.column6 = t_merged_id.zero_id
--This is the end of the query shown above
) t_list
ON t_one.one_id = t_list.one_idMy question is, why wouldn’t Oracle use the existing index PK_T_ONE, which is keyed on T_ONE.ONE_ID? I tried refactoring the query using a “WHERE t_one.one_id IN” construct instead of the INNER JOIN but it didn’t make any difference. Neither did adding an index hint, which I hoped would force the use of the PK index.
Any ideas?I was able to completely resolve my problem, but I still want to understand why the original query wouldn't use an index.
(My solution was to move all the joins and where clauses from the query that wrapped the one we've been discussing and put them into each SELECT in the UNION, so there is no longer any inner subquery. So instead of trying to first get a list of ID values from the subquery, get the full records for the IDs from an outer query, and then joining to the outer query, I made SELECT in the UNION contain the full logic. This makes the query a lot more verbose, because all the joins and wheres are repeated six times, but it does use the index and returns in 0.04 seconds instead of over nine minutes in my test database.)
hoek wrote:
Values for optimizer_index_caching and optimizer_index_cost_adj are not the defaults. Any reasons for that?I am not a DBA and have no idea. However, I did a Google search and found this: http://decipherinfosys.wordpress.com/2007/02/13/optimizer_index_cost_adj-and-optimizer_index_caching/. Apparently Tom Kyte would approve more of our settings than the defaults.
hoek wrote:
Any chance to get a realistic dataset on your test server?Unfortunately, not for quite some time. The customer won't provide any real data, and generating data for testing is complex because of all the interrelationships. I have someone working on that. However, I was able to get back on the primary test server that has 136k records in the main table instead of only 2k. So far as I know, the Oracle configuration between the test server and the customer's server is the same. However, they have much more serious hardware that I do (more processors, more RAM, more platters). On the other hand, they have 10 times as much data.
hoek wrote:
Your second execution plan contains differents stats, they're not the 'common ones'. (E-rows etc.)The predicates are the same as the first. The 2nd plan was generated by the 10g-specific portion of Randolph's script using the command "select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));".
This is the result from running the script on the main test server:
NAME TYPE VALUE
_optimizer_cost_based_transformation string OFF
optimizer_dynamic_sampling integer 2
optimizer_features_enable string 10.2.0.4
optimizer_index_caching integer 95
optimizer_index_cost_adj integer 10
optimizer_mode string CHOOSE
optimizer_secure_view_merging boolean TRUE
db_file_multiblock_read_count integer 32
db_block_size integer 8192
cursor_sharing string FORCE
SNAME PNAME PVAL1 PVAL2
SYSSTATS_INFO STATUS COMPLETED
SYSSTATS_INFO DSTART 04-04-2008 07:02
SYSSTATS_INFO DSTOP 04-04-2008 07:02
SYSSTATS_INFO FLAGS 1
SYSSTATS_MAIN CPUSPEEDNW 646.57331
SYSSTATS_MAIN IOSEEKTIM 10
SYSSTATS_MAIN IOTFRSPEED 4096
SYSSTATS_MAIN SREADTIM
SYSSTATS_MAIN MREADTIM
SYSSTATS_MAIN CPUSPEED
SYSSTATS_MAIN MBRC
SYSSTATS_MAIN MAXTHR
SYSSTATS_MAIN SLAVETHR
SQL> SELECT st.*
2 FROM t_senttsk st INNER JOIN (WITH t_mrgdusr AS (SELECT DISTINCT usr_id
3 FROM t_usr
4 WHERE NVL(usr_mrgemstr, usr_id) = 10000002 /* i_payer_id */
5 )
6 SELECT t_senttsk.setk_id
7 FROM t_senttsk INNER JOIN t_mrgdusr
8 ON t_senttsk.setk_affn_memb = t_mrgdusr.usr_id
9 UNION
10 SELECT t_senttsk.setk_id
11 FROM t_senttsk INNER JOIN t_mrgdusr
12 ON t_senttsk.setk_ownr = t_mrgdusr.usr_id) t_affil
13 ON st.setk_id = t_affil.setk_id;
no rows selected
Elapsed: 00:13:14.54
Execution Plan
Plan hash value: 1241660758
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 169K| 64M| 1403 (3)| 00:00:17 |
| 1 | NESTED LOOPS | | 169K| 64M| 1403 (3)| 00:00:17 |
| 2 | TABLE ACCESS FULL | T_SENTTSK | 136K| 51M| 1400 (3)| 00:00:17 |
| 3 | VIEW | | 1 | 6 | 1 (0)| 00:00:01 |
| 4 | TEMP TABLE TRANSFORMATION | | | | | |
| 5 | LOAD AS SELECT | | | | | |
| 6 | TABLE ACCESS BY INDEX ROWID | T_USR | 1 | 8 | 1 (0)| 00:00:01 |
|* 7 | INDEX RANGE SCAN | IX_NVL_USR_MRGEMSTR_USR_ID | 1 | | 1 (0)| 00:00:01 |
| 8 | SORT UNIQUE | | | | | |
| 9 | UNION-ALL PARTITION | | | | | |
| 10 | NESTED LOOPS | | 1 | 25 | 3 (0)| 00:00:01 |
| 11 | TABLE ACCESS BY INDEX ROWID| T_SENTTSK | 1 | 12 | 1 (0)| 00:00:01 |
|* 12 | INDEX UNIQUE SCAN | PK_T_SENTTSK | 1 | | 1 (0)| 00:00:01 |
|* 13 | VIEW | | 1 | 13 | 2 (0)| 00:00:01 |
| 14 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6608_399116CE | 1 | 6 | 2 (0)| 00:00:01 |
| 15 | NESTED LOOPS | | 1 | 22 | 3 (0)| 00:00:01 |
|* 16 | TABLE ACCESS BY INDEX ROWID| T_SENTTSK | 1 | 9 | 1 (0)| 00:00:01 |
|* 17 | INDEX UNIQUE SCAN | PK_T_SENTTSK | 1 | | 1 (0)| 00:00:01 |
|* 18 | VIEW | | 1 | 13 | 2 (0)| 00:00:01 |
| 19 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6608_399116CE | 1 | 6 | 2 (0)| 00:00:01 |
Predicate Information (identified by operation id):
7 - access(NVL("USR_MRGEMSTR","USR_ID")=10000002)
12 - access("T_SENTTSK"."SETK_ID"="ST"."SETK_ID")
13 - filter("T_SENTTSK"."SETK_AFFN_MEMB"="T_MRGDUSR"."USR_ID")
16 - filter("T_SENTTSK"."SETK_OWNR" IS NOT NULL)
17 - access("T_SENTTSK"."SETK_ID"="ST"."SETK_ID")
18 - filter("T_SENTTSK"."SETK_OWNR"="T_MRGDUSR"."USR_ID")
Statistics
349 recursive calls
275041 db block gets
1239881 consistent gets
26 physical reads
52730252 redo size
3312 bytes sent via SQL*Net to client
240 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
136835 sorts (memory)
0 sorts (disk)
0 rows processed
SQL> SELECT /*+ gather_plan_statistics */ st.*
2 FROM t_senttsk st INNER JOIN (WITH t_mrgdusr AS (SELECT DISTINCT usr_id
3 FROM t_usr
4 WHERE NVL(usr_mrgemstr, usr_id) = 10000002 /* i_payer_id */
5 )
6 SELECT t_senttsk.setk_id
7 FROM t_senttsk INNER JOIN t_mrgdusr
8 ON t_senttsk.setk_affn_memb = t_mrgdusr.usr_id
9 UNION
10 SELECT t_senttsk.setk_id
11 FROM t_senttsk INNER JOIN t_mrgdusr
12 ON t_senttsk.setk_ownr = t_mrgdusr.usr_id) t_affil
13 ON st.setk_id = t_affil.setk_id;
no rows selected
Elapsed: 00:09:15.90
SQL>
SQL> select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
SQL_ID 2rc9d2c83a7ak, child number 0
SELECT /*+ gather_plan_statistics */ st.* FROM t_senttsk st INNER JOIN (WITH t_mrgdusr AS (SELECT DISTINCT usr_id
FROM t_usr WHERE NVL(usr_mrgemstr, usr_id) = :"SYS_B_0"
/* i_payer_id */ )
SELECT t_senttsk.setk_id FROM t_senttsk INNER JOIN t_mrgdusr
ON t_senttsk.setk_affn_memb = t_mrgdusr.usr_id UNION SELECT
t_senttsk.setk_id FROM t_senttsk INNER JOIN t_mrgdusr ON
t_senttsk.setk_ownr = t_mrgdusr.usr_id) t_affil ON st.setk_id = t_affil.setk_id
Plan hash value: 1065206678
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | Used-Mem |
| 1 | NESTED LOOPS | | 1 | 169K| 0 |00:09:02.47 | 1514K| | | |
| 2 | TABLE ACCESS FULL | T_SENTTSK | 1 | 136K| 136K|00:00:01.64 | 7062 | | | |
| 3 | VIEW | | 136K| 1 | 0 |00:09:00.54 | 1507K| | | |
| 4 | TEMP TABLE TRANSFORMATION | | 136K| | 0 |00:09:00.12 | 1507K| | | |
| 5 | LOAD AS SELECT | | 136K| | 0 |00:08:24.31 | 548K| 1024 | 1024 | |
| 6 | TABLE ACCESS BY INDEX ROWID | T_USR | 136K| 1 | 0 |00:00:06.12 | 410K| | | |
|* 7 | INDEX RANGE SCAN | IX_NVL_USR_MRGEMSTR_USR_ID | 136K| 1 | 0 |00:00:05.41 | 410K| | | |
| 8 | SORT UNIQUE | | 136K| | 0 |00:00:19.10 | 822K| 1024 | 1024 | |
| 9 | UNION-ALL PARTITION | | 136K| | 0 |00:00:17.40 | 822K| | | |
| 10 | NESTED LOOPS | | 136K| 1 | 0 |00:00:08.02 | 411K| | | |
| 11 | TABLE ACCESS BY INDEX ROWID| T_SENTTSK | 136K| 1 | 136K|00:00:06.36 | 411K| | | |
|* 12 | INDEX UNIQUE SCAN | PK_T_SENTTSK | 136K| 1 | 136K|00:00:03.68 | 273K| | | |
|* 13 | VIEW | | 136K| 1 | 0 |00:00:01.03 | 0 | | | |
| 14 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6609_399116CE | 136K| 1 | 0 |00:00:00.67 | 0 | | | |
| 15 | NESTED LOOPS | | 136K| 1 | 0 |00:00:06.54 | 411K| | | |
|* 16 | TABLE ACCESS BY INDEX ROWID| T_SENTTSK | 136K| 1 | 34256 |00:00:05.87 | 411K| | | |
|* 17 | INDEX UNIQUE SCAN | PK_T_SENTTSK | 136K| 1 | 136K|00:00:03.46 | 273K| | | |
|* 18 | VIEW | | 34256 | 1 | 0 |00:00:00.25 | 0 | | | |
| 19 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6609_399116CE | 34256 | 1 | 0 |00:00:00.16 | 0 | | | |
Predicate Information (identified by operation id):
7 - access("T_USR"."SYS_NC00127$"=:SYS_B_0)
12 - access("T_SENTTSK"."SETK_ID"="ST"."SETK_ID")
13 - filter("T_SENTTSK"."SETK_AFFN_MEMB"="T_MRGDUSR"."USR_ID")
16 - filter("T_SENTTSK"."SETK_OWNR" IS NOT NULL)
17 - access("T_SENTTSK"."SETK_ID"="ST"."SETK_ID")
18 - filter("T_SENTTSK"."SETK_OWNR"="T_MRGDUSR"."USR_ID")
hoek wrote:Does rewriting 'the heart of the issue' into like below make any difference?
select a.*
from foo a
where exists ( select null
from bar b
where a.foo_pk_id = b.foo_pk_id
and b.some_col = :bind_var
The UNION in the subquery seems to make that difficult. -
Hi All,
I have a column like lastdate with varchar datatype. now I want to work with lastdate column in where clause with getdate().
Ex: where
getdate() - lastdate < 1
when I use above one I got error like
Error = Conversion failed when converting date and/or
time from character string.
I knew the datatypes for lastdate and getdate() are different...
how can I use...
Thanks,
rupYou need to convert the string date to datetime or date. See conversion examples here:
http://www.sqlusa.com/bestpractices/datetimeconversion/
Example for the where clause:
WHERE DATEDIFF(DD, convert(datetime, lastdate, 101), getdate() ) < 1
Can you post sample string dates?
Are you looking for today's records? Another option (depends on lastdate format):
WHERE lastdate = convert(char(8), getdate(), 112)
Kalman Toth Database & OLAP Architect
SQL Server 2014 Design & Programming
New Book / Kindle: Exam 70-461 Bootcamp: Querying Microsoft SQL Server 2012
Maybe you are looking for
-
External Monitor on MBP (Invalid format error)
I searched the forums and couldn't find a similar issue so here goes. I have a late 2008 MBP with Snow Leopard connected to a Vizio(MODEL#VM230XVT)LCD 1080P HDTV. I'm trying to use this in "closed lid" mode and using Apple Bluetooth mouse/KB. Because
-
Hello Gurus, I have written a SP in an ODI Procedure [not calling an SP]. The tables are located in the ODIDEV schema on another Oracle instance. I have successfully used the same SP but my odidev schema has been on the same oracle instance as my oth
-
Having created a magazine in Indesign CS6 with hyperlinks throughout - I now want to create a page turning SWF. On doing so, everything works fine apart from the hyperlinks. If I export as a interactive pdf the links worth fine - has anyone else had
-
Hello , I upgraded my son hp 2000 notebook from 8 to 8.1 and since then problem has started .There seem to be problem where am unable to see any graphic on internet ,only text is visible .Please someone can help me to solve this issue step by step
-
What error is this, how can I avoid getting it again?
http://imgur.com/HbCEu.jpg