Dynamic query, where clause help
Hi Folks,
Using my code below to generate a query.
When using more than one condition, I'm not sure how to work out where the AND goes.
Can anyone please help?
Thankyou
WHERE
<cfif stafffilter neq "">
deviceofficer = #stafffilter#
</cfif>
<cfif assetid neq "">
AND deviceasset = '#assetid#'
</cfif>
<cfif isdefined("noasset")>
AND deviceasset = ''
</cfif>
<cfif isdefined("noserial")>
AND deviceserial = ''
</cfif>
<cfif serial neq "">
AND deviceserial = '#serial#'
</cfif>
<cfif servicearea neq "">
AND deviceservice = #servicearea#
</cfif>
ORDER by locationname
I do this sort of thing:
<cfset sWhereAnd = "WHERE">
<cfif isdefined("colFilter")>
#sWhereAnd# col = #colFilter#
<cfset sWhereAnd = "AND">
</cfif>
<cfif isdefined("someOtherColFilter")>
#sWhereAnd# someOtherCol = #someOtherColFilter#
<cfset sWhereAnd = "AND">
</cfif>
[etc]
(that's pseudocode... I'd never use isDefined() or not use a <cfqueryparam> tag for my parameter values).
I don't like doing the somewhat popular WHERE 1=1 approach as it can force a full table scan (all rows in the table will match that, and each WHERE filter expression is applied to every row of the table being filtered), unless the DB optimises it out as noise (which is what it is). To me it's using bad SQL to cut corners.
To be honest though, I shy away from these generic sort of queries these days. Most of the genericism never gets used, and more specific requirements are better implemented to meet the precise need.
Adam
Similar Messages
-
Hi,
I have the following query in a SQL Query (Pl/Sql Function Body Returning Sql Query) report:
DECLARE
q VARCHAR2(32767); -- query
w VARCHAR2(4000) ; -- where clause
we VARCHAR2(1) := 'N'; -- identifies if where clause exists
BEGIN
q:= 'SELECT "OSP_ID",' ||
' "OSP_NUMBER",'||
' "PROPOSAL_TITLE",'||
' "PROPOSAL_TYPE",'||
' "AGENCY_TYPE_CODE",'||
' "AGENCY_TYPE",'||
' "AGENCY_CODE",'||
' "AGENCY_NAME",'||
' "AGENCY_ABBREVIATION",'||
' "SPONSOR_CODE",'||
' "SPONSOR_NAME",'||
' "PI_NAME",'||
' "PI_EMP_NUMBER",'||
' "PI_PERS_ID" '||
' FROM "PROPOSAL_V" ';
IF :P25_OSP_NUMBER != '-All-'
THEN
w := ' OSP_NUMBER = :P25_OSP_NUMBER ';
we := 'Y';
END IF;
IF :P25_PROPOSAL_TYPE != '-1'
THEN
IF we = 'Y'
THEN
w := w || ' AND PROPOSAL_TYPE = :P25_PROPOSAL_TYPE ';
ELSE
w := ' PROPOSAL_TYPE = :P25_PROPOSAL_TYPE ';
we := 'Y';
END IF;
END IF;
IF we = 'Y'
THEN q := q || ' WHERE '|| w;
END IF;
RETURN q;
END;
What I need is to change the ' OSP_NUMBER = :P25_OSP_NUMBER ';
to ' OSP_NUMBER LIKE '%'||:P25_OSP_NUMBER'%'|| ';
But I'm getting errors when I do like above.
Can somebody please help...
Thanks in advance
- PradeepFirst of all, get rid of that silly "where exists" variable, just add a where clause like where 1=1 to the query and keep adding dynamic clauses with AND clause as needed.
Try
q := q||'and OSP_NUMBER LIKE ''%'''||:P25_OSP_NUMBER||'''%'''; -
Need help in clearing string buffer during dynamic VO where clause in oaf
Hi All,
I am dynamically setting where clause in OAF using string buffer, but the issue is when i am executing the vo multiple times so the old data in the string buffer it is not clearing .so every time my where clause adding to the query and it is erroring out, please help me how to clear string buffer class in oaf.
ThnaksHi,
Could you please share the code segment for reference. Then we can tell the solution.
Regards,
Tarun -
I have the following schema:
<?xml version="1.0"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="CountryRiskService"
targetNamespace="CountryRiskService"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="CountryRiskParameters">
<xs:complexType>
<xs:sequence>
<xs:element name="countryId" type="xs:int" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="catA" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
I am passing this into my Logical Data Service, what I want to do is create a dynamic XQuery where clause if the catA field is populated, ignore it if it isn’t, so basically, I want to be able to create a dynamic query based on the parameters requested, so I have the following XQUERY:
declare function tns:getCountries($countryRiskInput as element(ns7:CountryRiskParameters)) as element(ns0:CountryRiskInfo)* {
for $tbl_high_risk_countries in ns1:tbl_high_risk_countries()
where $countryRiskInput/ns4:countryId = $tbl_high_risk_countries/country_id
where $countryRiskInput/ns4:catA = $tbl_high_risk_countries/risk_catA
I really thought that DSP would be able to handle this on the fly since the element is optional but if I don’t populate it, I get nothing back, the idea is I want to increase the number of elements in my schema so my consumers have the ability to filter the results they want, so above, I don’t want the second where clause if catA isn't specified, any ideas how to accomplish this?Simply add the disjunction of the input being empty.
for $tbl_high_risk_countries in ns1:tbl_high_risk_countries()
where $countryRiskInput/ns4:countryId = $tbl_high_risk_countries/country_id
where ( $countryRiskInput/ns4:catA = $tbl_high_risk_countries/risk_catA or empty( $countryRiskInput/ns4:catA )
But suppose you have 27 different elements that you might want to filter on - the xquery gets long and ugly. You might want to looking into using FilterXQuery. Visit http://edocs.bea.com/aldsp/docs25/, search on FilterXQuery, look for the tutorial.
If your queries get more complicated, you would do well to look into generating ad hoc queries. (edocs as well). -
Console keeps showing this about a zillion times in a row, a zillion times a day: "Mail [12721] Error 1 performing query: WHERE clause too complex no more than 100 terms allowed"
I can't find any search results anywhere online about this.
Lots of stalls and freezes in mail, finder/os x, and safari -- freqent failures to maintain a broadband connection (multiple times every day).
All apps are slow, cranky with interminable beach balls getting worse all the time.
anyone know what the heck is going on?Try rebuilding the mailbox to see if that helps.
Also, how much disk space is available on your boot drive? -
Change my sql query where-clause in an extended controller
Hello,
i am trying to change my sql query where-clause in an extended controller
personAplListVO.setWhereClause(null); // first set to null
personAplListVO.setWhereClauseParams(null); // first set to null
personAplListVO.setWhereClause(personAplListVOWhereClause +
newWhereClause);
personAplListVO.setWhereClauseParams(whereClauseParams);
personAplListVO.executeQuery();
System.out.println(">>>>>>>>getQuery = " + personAplListVO.getQuery());
when i get the query ( personAplListVO.getQuery()) after executeQuery(), the new newWhereClause values are missing.
Also i am getting null from personAplListVO.getWhereClause() after executeQuery()
as if the above code is not making any effect.
any ideas why?
Thank youHello,
My Query:
/* Formatted on 2011/06/15 15:50 (Formatter Plus v4.8.8) */
SELECT /*+ FIRST_ROWS */
NULL AS selectflag, ppf.full_name AS person_name,
ppf.first_name AS person_first_name, ppf.last_name AS person_last_name,
ppf.email_address, addr.derived_locale, addr.address_id,
phn.phone_number, phn.phone_id, ppf.date_of_birth, addr.address_line1,
(SELECT COUNT (*)
FROM per_all_assignments_f paf2,
per_all_people_f ppf2
WHERE paf2.assignment_type = 'A'
AND :1 BETWEEN paf2.effective_start_date AND paf2.effective_end_date
AND paf2.person_id = ppf2.person_id
AND paf2.effective_start_date BETWEEN ppf2.effective_start_date
AND ppf2.effective_end_date
AND ppf2.party_id = ppf.party_id
HAVING COUNT (*) > 0) AS jobs_applied_for,
(SELECT MAX (paf.effective_start_date)
FROM per_all_assignments_f paf,
per_all_people_f ppf2
WHERE paf.assignment_type = 'A'
AND :2 >= paf.effective_start_date
AND paf.person_id = ppf2.person_id
AND paf.effective_start_date BETWEEN ppf2.effective_start_date
AND ppf2.effective_end_date
AND ppf2.party_id = ppf.party_id) AS last_application,
ppf.person_id, ppf.effective_start_date, ppf.effective_end_date,
DECODE (vac.manager_id, :3, 'Y', 'N') AS my_applicants,
vac.NAME AS vacancy_name, vac.vacancy_id, paf.assignment_id,
(SELECT /*+ push_subq */
MIN (pasf.effective_start_date)
FROM per_all_assignments_f pasf
WHERE pasf.assignment_id = paf.assignment_id) AS application_date,
paf.effective_end_date AS assignment_end_date,
ast.user_status AS application_status, ast.assignment_status_type_id,
vac.status AS vacancy_status, mgr.full_name AS recruiting_manager,
mgr.person_id AS recruiting_manager_id,
mgr.effective_start_date AS effective_start_date1,
mgr.effective_end_date AS effective_end_date1,
rec.full_name AS recruiter, rec.person_id AS recruiter_id,
rec.effective_start_date AS effective_start_date2,
rec.effective_end_date AS effective_end_date2,
ppf.per_information_category, ppf.per_information1,
ppf.per_information2, ppf.per_information3, ppf.per_information4,
ppf.per_information5, ppf.per_information6, ppf.per_information7,
ppf.per_information8, ppf.per_information9, ppf.per_information10,
ppf.per_information11, ppf.per_information12, ppf.per_information13,
ppf.per_information14, ppf.per_information15, ppf.per_information16,
ppf.per_information17, ppf.per_information18, ppf.per_information19,
ppf.per_information20, ppf.per_information21, ppf.per_information22,
ppf.per_information23, ppf.per_information24, ppf.per_information25,
ppf.per_information26, ppf.per_information27, ppf.per_information28,
ppf.per_information29, ppf.per_information30,
FLOOR
(irc_location_utility.sdo_miles (iwp.geometry, loc.geometry, 0.01)
) AS distance_to_location,
loc.location_id, loc.derived_locale AS derived_locale1,
doc.document_id, doc.file_name,
NVL2 (doc.document_id, 'Y', 'N') AS previewenabled,
inp.notification_preference_id, ppf.attribute_category, ppf.attribute1,
ppf.attribute2, ppf.attribute3, ppf.attribute4, ppf.attribute5,
ppf.attribute6, ppf.attribute7, ppf.attribute8, ppf.attribute9,
ppf.attribute10, ppf.attribute11, ppf.attribute12, ppf.attribute13,
ppf.attribute14, ppf.attribute15, ppf.attribute16, ppf.attribute17,
ppf.attribute18, ppf.attribute19, ppf.attribute20, ppf.attribute21,
ppf.attribute22, ppf.attribute23, ppf.attribute24, ppf.attribute25,
ppf.attribute26, ppf.attribute27, ppf.attribute28, ppf.attribute29,
ppf.attribute30, TO_CHAR (ROWNUM) AS rownumber,
TO_CHAR
((irc_utilities_pkg.get_recruitment_person_id (ppf.person_id, :4))
) AS root_person_id,
TO_CHAR
(irc_skills_matching_pkg.vacancy_match_percent
(irc_utilities_pkg.get_recruitment_person_id (ppf.person_id,
:5
vac.vacancy_id,
:6
) AS match_percent,
ppf.party_id, paf.effective_start_date AS assignment_start_date,
pov.vendor_id, pov.vendor_name, regatmpt.attempt_id AS reg_attempt_id,
TO_NUMBER (DECODE (regatmpt.raw_score, -1000, NULL, regatmpt.raw_score)
) AS reg_attempt_score,
NVL2
(regatmpt.mastery_score,
DECODE (GREATEST (regatmpt.mastery_score, regatmpt.raw_score),
regatmpt.raw_score, 'P',
'F'
NVL2 (fnd_profile.VALUE ('IRC_REGISTER_TEST'),
NVL2 (inp.attempt_id, 'A', 'N'),
NULL
) AS reg_attempt_status,
aplatmpt.attempt_id AS apl_attempt_id,
TO_NUMBER (DECODE (aplatmpt.raw_score, -1000, NULL, aplatmpt.raw_score)
) AS apl_attempt_score,
NVL2
(aplatmpt.mastery_score,
DECODE (GREATEST (aplatmpt.mastery_score, aplatmpt.raw_score),
aplatmpt.raw_score, 'P',
'F'
NVL2 (vac.assessment_id, NVL2 (iad.attempt_id, 'A', 'N'), NULL)
) AS apl_attempt_status,
hrl.meaning, hrl.lookup_type, hrl.lookup_code,
iad.assignment_details_id, iad.considered AS considered,
vac.business_group_id,
NVL
((SELECT iav.manage_applicants_allowed
FROM irc_agency_vacancies iav
WHERE iav.vacancy_id = vac.vacancy_id
AND iav.agency_id = fnd_profile.VALUE ('IRC_AGENCY_NAME')),
'Y'
) AS manage_applicants_allowed,
DECODE (paf.source_type, 'ER', 'Y', 'N') AS referred,
ircreferralinfoeo.start_date, ircreferralinfoeo.end_date,
(SELECT meaning
FROM hr_lookups
WHERE lookup_code = ircreferralinfoeo.source_type
AND lookup_type = 'REC_TYPE') AS sourcetype,
DECODE (ircreferralinfoeo.source_type,
'ER', (SELECT full_name
FROM per_all_people_f
WHERE person_id = ircreferralinfoeo.source_person_id
AND SYSDATE BETWEEN effective_start_date
AND effective_end_date),
ircreferralinfoeo.source_name
) AS sourcename,
ircreferralinfoeo.object_id, ircreferralinfoeo.object_type
FROM per_addresses addr,
per_phones phn,
per_all_people_f ppf,
per_all_assignments_f paf,
per_all_vacancies vac,
per_assignment_status_types_v ast,
per_all_people_f mgr,
per_all_people_f rec,
irc_notification_preferences inp,
hr_locations_all_vl loc,
irc_documents doc,
irc_search_criteria iwp,
per_all_people_f irc_ppf,
po_vendors pov,
ota_attempts regatmpt,
irc_assignment_details_f iad,
ota_attempts aplatmpt,
hr_lookups hrl,
irc_referral_info ircreferralinfoeo
WHERE irc_utilities_pkg.get_recruitment_person_id (ppf.person_id, :7) =
irc_ppf.person_id
AND :8 BETWEEN ppf.effective_start_date AND ppf.effective_end_date
AND irc_ppf.party_id = ppf.party_id
AND ppf.person_id = paf.person_id
AND paf.assignment_type = 'A'
AND paf.vacancy_id = vac.vacancy_id
AND :9 BETWEEN paf.effective_start_date AND paf.effective_end_date
AND paf.assignment_status_type_id = ast.assignment_status_type_id
AND irc_ppf.person_id = doc.person_id(+)
AND irc_ppf.person_id = phn.parent_id(+)
AND phn.parent_table(+) = 'PER_ALL_PEOPLE_F'
AND phn.phone_type(+) = 'H1'
AND :10 BETWEEN NVL (phn.date_from(+), :11) AND NVL (phn.date_to(+), :12)
AND vac.manager_id = mgr.person_id(+)
AND :13 BETWEEN mgr.effective_start_date(+) AND mgr.effective_end_date(+)
AND vac.recruiter_id = rec.person_id(+)
AND :14 BETWEEN rec.effective_start_date(+) AND rec.effective_end_date(+)
AND irc_ppf.person_id = inp.person_id(+)
AND inp.person_id = addr.person_id(+)
AND NVL (inp.address_id, DECODE (addr.address_type(+), 'REC', addr.address_id(+),
-1)) = addr.address_id(+)
AND :15 BETWEEN addr.date_from(+) AND NVL (addr.date_to(+), :16)
AND loc.location_id(+) = vac.location_id
AND doc.TYPE(+) LIKE '%RESUME'
AND doc.end_date(+) IS NULL
AND irc_ppf.person_id = iwp.object_id(+)
AND iwp.object_type(+) = 'WPREF'
AND :17 BETWEEN irc_ppf.effective_start_date AND irc_ppf.effective_end_date
AND ( inp.agency_id = fnd_profile.VALUE ('IRC_AGENCY_NAME')
OR fnd_profile.VALUE ('IRC_AGENCY_NAME') IS NULL
AND inp.agency_id = pov.vendor_id(+)
AND inp.attempt_id = regatmpt.attempt_id(+)
AND paf.assignment_id = iad.assignment_id(+)
AND :18 BETWEEN iad.effective_start_date(+) AND iad.effective_end_date(+)
AND iad.latest_details(+) = 'Y'
AND iad.attempt_id = aplatmpt.attempt_id(+)
AND hrl.lookup_type(+) = 'VACANCY_STATUS'
AND vac.status = hrl.lookup_code(+)
AND paf.assignment_id = ircreferralinfoeo.object_id(+)
AND SYSDATE BETWEEN ircreferralinfoeo.start_date(+) AND ircreferralinfoeo.end_date(+)
AND ( 1 = 1
AND (NVL (doc.document_id, 1) =
NVL ((SELECT MAX (idoc1.document_id)
FROM irc_documents idoc1
WHERE idoc1.person_id = irc_ppf.person_id
AND idoc1.TYPE IN ('RESUME', 'AUTO_RESUME')
AND idoc1.end_date IS NULL
AND idoc1.last_update_date =
(SELECT MAX (idoc2.last_update_date)
FROM irc_documents idoc2
WHERE idoc2.person_id = irc_ppf.person_id
AND idoc2.TYPE IN
('RESUME', 'AUTO_RESUME')
AND idoc2.end_date IS NULL)),
1
and my where clause that i want to append to the existing one:
and ppf.sex = 'M' and ppf.nationality = '1680'
my processFormRequest function in my extended CO
public void processFormRequest(OAPageContext pageContext,
OAWebBean webBean) {
super.processFormRequest(pageContext, webBean);
OAApplicationModule am = pageContext.getApplicationModule(webBean);
String genderValue = pageContext.getParameter("gender");
String nationality = pageContext.getParameter("nationality");
ViewObject personAplListVO = am.findViewObject("PersonAplListVO");
String personAplListVOWhereClause = personAplListVO.getWhereClause();
Object[] whereClauseParams = personAplListVO.getWhereClauseParams();
String newWhereClause = "";
//gender
if (genderValue != null && !genderValue.trim().equals("")) {
newWhereClause += " and ppf.sex = '" + genderValue + "'";
//nationality
if (nationality != null && !nationality.trim().equals("")) {
newWhereClause += " and ppf.nationality = '" + nationality + "'";
System.out.println("\n>>>>>>>>getQuery = " + personAplListVO.getQuery());
System.out.println("\n>>>>>>>>newWhereClause = " + newWhereClause);
if (!newWhereClause.equals("")) {
personAplListVO.clearCache();
personAplListVO.setWhereClause(null); // first set to null
personAplListVO.setWhereClauseParams(null); // first set to null
personAplListVO.setWhereClause(personAplListVOWhereClause +
newWhereClause);
personAplListVO.setWhereClauseParams(whereClauseParams);
personAplListVO.executeQuery();
// System.out.println(">>>>>>>>newWhereClause" +
// personAplListVOWhereClause + newWhereClause);
// System.out.println(">>>>>>>>getWhereClause" +
// personAplListVO.getWhereClause());
// System.out.println(">>>>>>>>getQuery = " +
// personAplListVO.getQuery());
any tips?
thanks a lot -
Adding filter conditions dynamically in WHERE clause -dynamic SQL help
Here I have a simple condition but very complicated query. Basically, I have to put a filter condition in my where clause. "Location" comes to the stored procedure as parameter. Plus there are other parameters as well.
If location = "all", I can run the query simply and get the result. But when Location = "CA", which is just a subset of "ALL" then I am having hard time putting one -- AND statement in WHERE clause.
This query is designed for location = 'ALL'
open cv for
'Select col1, col2, col3, Col4
from t1, t2, t3
WHERE condition1
AND condition2
AND condition3'
AND location = location_id --- This should only run if location IS NOT ALL
I have written a dynamic query but it doesn't work for that part. Any ideas will be appreciated. Thanks,From what I understood
If location = 'ALL' then
fetch all the records
Else
add extra filter location_id = <supplied location id>
End If
If this is the condition the following logic should solve your issue.
open cv for
'Select col1, col2, col3, Col4
from t1, t2, t3
WHERE condition1
AND condition2
AND condition3'
AND ((location_id = location_id and location = 'ALL') or (location_id = location))Regards
Raj -
Issue with dynamically setting where clause in OAF
Hi All,
I have a View object having the query below:
SELECT rownum LINENUM,
B.line_id LINE_ID,
B.INVENTORY_ITEM_ID INVITMID ,
B.QUANTITY_DELIVERED PICKQTY
from MTL_TXN_REQUEST_HEADERS A,
MTL_TXN_REQUEST_LINES B
WHERE A.HEADER_ID=B.HEADER_ID
AND A.MOVE_ORDER_TYPE=2
AND 'on'=:1
AND B.TO_SUBINVENTORY_CODE=NVL(:4,B.TO_SUBINVENTORY_CODE)
AND A.request_number=NVL(:5,A.REQUEST_NUMBER)
UNION ALL
SELECT rownum LINENUM,
a.wip_entity_id LINE_ID,
a.INVENTORY_ITEM_ID INVITMID,
a.QUANTITY_ISSUED PICKQTY
FROM WIP_REQUIREMENT_OPERATIONS a,
eam_work_orders_v b
WHERE a.wip_entity_id=b.wip_entity_id
AND 'on'=:2
AND a.ATTRIBUTE2=NVL(:4,a.ATTRIBUTE2)
and b.wip_entity_name=NVL(:6,b.wip_entity_name)
I need to pass dynamically a condition to my where clause that i can handle it by defining two bind parameters in the vo query and can pass it but the problem is the bind variable contains a string like 1311,13112,14445 that i need to pass for a field such as B.line_id in the first query and b.wip_entity_id in the second query so when i am trying by passing the string as one value it is working fine but for value separetd by comma it is giving prob.
so i tried by passing dynamic where clause but it is everytime executing for first clause only how i can pass dynamically both the queries.
vo.setWhereClause("LINE_ID in "+wherclause);
please help me out
Thnaks
DebHi Gaurav,
Thnaks for the reply i tried belwo way u suggested but the query is executing multiple times and i am not getting the correct data as expected.
public void processPOData (String wherclause)
OAViewObject vo = this.getXXDPECONTAINLINESVO1();
String query =vo.getQuery();
String newwhereclause ="LINE_ID = "+wherclause;
StringBuffer stringbuffer = new StringBuffer();
stringbuffer.append("SELECT * FROM (");
stringbuffer.append(query);
stringbuffer.append(") where ");
stringbuffer.append(newwhereclause);
ViewDefImpl viewdefimpl = getXXDPECONTAINLINESVO1().getViewDefinition();
viewdefimpl.setQuery(stringbuffer.toString());
vo.reset();
vo.clearCache();
vo.executeQuery();
System.out.println("where clause:"+wherclause);
in my log file the query is forming like below:
SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM ( SELECT * FROM ( SELECT rownum LINENUM,
B.line_id LINE_ID,
B.INVENTORY_ITEM_ID INVITMID ,
B.QUANTITY_DELIVERED PICKQTY ,
B.TO_SUBINVENTORY_CODE UNLOADINGPNT,
A.REQUEST_NUMBER RRNUM,
NULL WORKORDNUM,
NULL DTRNUM,
A.description,
A.FROM_SUBINVENTORY_CODE FROM_SUB,
A.TO_SUBINVENTORY_CODE TO_SUB,
NULL SOURCE
from MTL_TXN_REQUEST_HEADERS A,
MTL_TXN_REQUEST_LINES B
WHERE A.HEADER_ID=B.HEADER_ID
AND A.MOVE_ORDER_TYPE=2
UNION ALL
SELECT rownum LINENUM,
a.wip_entity_id LINE_ID,
a.INVENTORY_ITEM_ID INVITMID,
a.QUANTITY_ISSUED PICKQTY,
a.ATTRIBUTE2 UNLOADINGPNT,
NULL RRNUM,
b.WIP_ENTITY_NAME WORKORDNUM,
NULL DTRNUM,
b.description,
NULL FROM_SUB,
NULL TO_SUB,
b.source SOURCE
FROM WIP_REQUIREMENT_OPERATIONS a,
eam_work_orders_v b
WHERE a.wip_entity_id=b.wip_entity_id ) )) where LINE_ID = 30026) where LINE_ID = 30026) where LINE_ID = 30026
But in my page i am getting all the data instead of only for line 30026, please help me out -
How To change the ADF View Object query where-clause at RunTime?
I am trying to create a simple display page which will display user data (username, assoc_dist_id, assoc_agent_id, status , etc). The User data is stored in a database table and i am using an ADF Read Only table based on the View Object to display the data on the JSF page.
However, i want to display only the users that a particular person accessing the page has the AUTH LEVEL to see. e.g. If the person accessing the page is an 'ApplicationAdministrator' then the page should display all users in the table, If its a 'DistributorAdministrator' then the page should display only users associated with that Distributor (i.e. assoc_dist_id = :p_Dist_id ) and If its an 'AgentAdministrator' , then the page should display only users associated with that Agent ( i.e. assoc_agent_id = :p_Agent_id).
Currently my af:table component displays all the users in the table because the query for the view object is (select * from users) . However, i want to use the same viewobject and just set the where-clause at runtime with the appropriate parameter to restrict the dataset returned.
Do anyone knows how to accomplish this ?David,
See the custom method initializeDynamicVariableDefaults() in the SRViewObjectImpl.java class in the FrameworkExtentions project in the SRDemoSampleADFBC sample application. You can find out how to install the demo if you haven't already from the ADF Learning Center at:
http://www.oracle.com/technology/products/adf/learnadf.html
This class is a framework extension class for view objects that adds a neat, generic feature to be able to dynamic default the value of named bind variables. You can read more about what framework extension classes are and how to use them in Chapter 25, "Advanced Business Components Techniques" of the ADF Developer's Guide for Forms/4GL Developers, also available at the learning center above.
It is an example of generic framework functionality that "kicks in" based on the presence of custom metadata properties on a named bind variable. See section 25.3.3 "Implementing Generic Functionality Driven by Custom Properties" in the dev guide for more details. Using this sample code, if you add a bind variable to a view object, and define a custom metadata property named "DynamicDefaultValue" on that bind variable, and set this custom metadata property to the value "CurrentUser", then that bind variable will have its value dynamically defaulted to the name of the authenticated user logged in. If instead you set this custom property to the value "UserRole", then the bind variable will be set to the comma-separated string containing the list of roles that the authenticated user is part of.
Once you've created a framework extension class for view objects like this, you can have the view objects you create inherit this generic functionality.See section 25.1.4 "How to Base an ADF Component on a Framework Extension Class" in the dev guide for more info on this.
By adapting a technique like this (or some idea similar that better suits your needs) you can have your view object query contain bind variables whose values automatically take on the defaults based on something in the user-session environment. -
How to dynamically build where clause in Linq
Hello everyone,
Oracle DB:11gR2
Oracle Client: 11.2.0.3.0 (ODP.NET)
Oracle Developer Tools for Visual Studio
VS 2010 (C#)
In a Windows Form, we need to query the data based on the values of dropdown listboxes, which user will select.
Let's say, two combox, one is for Department and one is for Salary
Department:
-1 All
10 Department 1
20 Department 2
30 Department 3
Salary:
-1 All
1 < 20000
2 20000 to 50000
3 50000 to 100000
4 > 100000
Here is C# code to query data:
using (var myEDMctx = new HREntities())
var LINQrslt = from emp in myEDMctx.EMPLOYEES
select emp;
The default values for both combox should be All.
How to write the dynamic where clause for this LINQ?
Thanks in advance!!!There is nothing Oracle-specific about dynamic LINQ queries. Dynamic LINQ queries are handled all the same way, no matter which data source you use. Microsoft describes how to use Dynamic LINQ here:
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
http://weblogs.asp.net/davidfowler/archive/2010/08/19/dynamic-linq-part-2-evolution.aspx -
Case Statement in a Where clause help
Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
"CORE 11.2.0.1.0 Production"
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
Hello,
I have an APEX application that I need to build a SQL statement for a LOV (List of Values). I have a hidden filed that contains the customer type which can be an 'R' or 'B'. The query needs to be able to display two different result sets based on the customer type of 'R' or 'B'.
If the customer type is 'R' then:
SELECT drg_descr d, drg_code r
FROM distance_ranges
WHERE drg_min_miles IN (0,5)
ORDER BY drg_min_milesIf the customer type is 'B' then:
SELECT drg_descr d, drg_code r
FROM distance_ranges
WHERE drg_min_miles IN (0,5,10,15,20)
ORDER BY drg_min_milesCan someone help me with what I think needs to be a case statement?
Thanks,
JoeHi,
You can try CASE statement with WHERE clause
SELECT drg_descr d, drg_code r
FROM distance_ranges
WHERE (CASE param_cust_type
WHEN(param_cust_type='R') THEN (drg_min_miles IN (0, 5)
WHEN (param_cust_type='B') THEN (drg_min_miles IN (0,5,10,15,20)
END;
Please try and let me know if anything wrong.
Anyone from the forum comment my code if there is any wrong.
Thanks!
Naresh -
Dynamically setting where clause parameter before the page load
Hi Experts,
I do have the following requirement.
I am working on jsf page in ADF10.1.3.3. I have a View Object which displays the results on the screen. Can someone provide me some example where I can dynamically set the where clause parameter to my Query in VO before the Page Load happens(By Overriding the Prepare Model) and display results on screen.
ThanksHi,
Thanks for yor advice.
I need to write the method in Prepare Model method when the page loads and not in AM.
Here in the page there is no action as such.
On the Page load we need to directly set the Where Clause on the VO.
Provide me some examples if any.
Thanks -
Hi,
I have table with a partition on a column of date data type. Each partition has a month's data in it. I use the following query to fetch the data:
select column1, column2
from table1 partition(apr2011)
where trunc(date_column) = '01-APR-11';
The query works fast when partition has less records(data for 10-15 days). But as the number of records in the partition increases(at month end), the time taken to retrieve the result is much more. Request you to please help me with an alternative for the 'where clause' to get faster data.
Thanks.Thanks Mohamed,
Finally the coin dropped
SQL> CREATE TABLE sales_range
(salesman_id NUMBER(5),
sales_date DATE)
PARTITION BY RANGE(sales_date)
PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','MM/DD/YYYY')),
PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','MM/DD/YYYY')),
PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','MM/DD/YYYY')),
PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','MM/DD/YYYY'))
Table created.
SQL> set autotrace traceonly explain
SQL> SELECT * FROM sales_range
WHERE sales_date = TO_DATE ( '03/01/2000', 'MM/DD/YYYY');
no rows selected.
Execution Plan
0 SELECT STATEMENT Optimizer Mode=ALL_ROWS (Cost=2 Card=1 Bytes=97)
1 0 PARTITION RANGE SINGLE (Cost=2 Card=1 Bytes=97)
2 1 TABLE ACCESS FULL KORT.SALES_RANGE (Cost=2 Card=1 Bytes=97)
SQL> SELECT * FROM sales_range
WHERE TRUNC (sales_date) = TO_DATE ( '03/01/2000', 'MM/DD/YYYY');
no rows selected.
Execution Plan
0 SELECT STATEMENT Optimizer Mode=ALL_ROWS (Cost=2 Card=1 Bytes=97)
1 0 PARTITION RANGE ALL (Cost=2 Card=1 Bytes=97)
2 1 TABLE ACCESS FULL KORT.SALES_RANGE (Cost=2 Card=1 Bytes=97)
Your explanation If using TRUNC, you don't get partition elimination
Regards
Peter -
MDX query - need to run different query (where clause) on mondays
The below query works OK and uses the substitution variable CurrentWeek in the WHERE clause, but I have one shortcoming that I need your help for:
The query works fine for all days but mondays. On Mondays I need the query to fetch numbers from last week (as opposed to current week) as the query returns null as the cubes have no data for current week on mondays. Hence I need to change the where clause to use substitution variable LastWeek, or in some other way run a different query on mondays. I have another substitution variable called WeekDay which I can use to test which day of the week it is, but I am not sure of the syntax I need to use to test for day of week and then have the query use different substitution variables as a result of this test.
Please help.
Henning Strand
SELECT NON EMPTY {[Measures].[meas_sg]} ON COLUMNS,
NON EMPTY {[Kunde],[Kunde].[KU01],[Kunde].[KU02],[Kunde].[KU03],[Kunde].[KU04]} ON ROWS
FROM MIFS.MIFS
WHERE ([Marked].[Dagligvare],[Tid].[&CurrentWeek])Or to go off of Sean's suggestion, programmatically change the value of the substitution variable, and leave the code alone.
Other thoughts -- have a load process to a single cell (sorry, my BSO roots are showing, but the concept is the same, load a single number) and then do a boolean test off its value -- 0 = Monday, 1 = the rest of the week.
Regards,
Cameron Lackpour -
Selecting values for query where clause
hi guys, this is possibly a silly question but not sure if i am approaching the solution in the correct mannor.
At the top of my form i have text box which the user fills in various values. These values are then used to refine the query results in the block below. I know i can go into the datablock being queried and set the where clause to equal the value of the text boxes above but i dont feel this is the right place to do it.
If i do it that way when the text box above is blank it returns no reults when infact i want to query everything if the values are left blank. So should i put it in pre query? if so what way should it be done?
Any help would be greatly appreciated.
Thanks.Hello,
If i do it that way when the text box above is blank it returns no reults when infact i want to query everything if the values are left blank. So should i put it in pre query? if so what way should it be done?Not really if you use like below in block's where clause...
db_field_name1=NVL(:form_field_name1,db_field_name1) AND
db_field_name2=NVL(:form_field_name2,db_field_name2)-Ammad
Maybe you are looking for
-
IDOC creation after the creation of a purchase order
Hi everybody, I want some configuration details regardign IDOC creation. The requirement is, once i create a purchase order in one system, the details should automatciaclly transfer to other system through IDOC. could any one suggest any
-
I still can't figure this out...Help!
Wow, my head hurts from trying to get Qmaster up and running...all the wasted hours! Anyways, I have a DP 2.5GHz G5 and a DP 1.25GHz G4...the G5 has FCS installed (5.1.4), G4 only has Qmaster related items installed and both computers running 10.4.8
-
Hello, does anybody know, if there will be something like a CLIENT_DDE-package (related to the old DDE-package of forms) in webutil. The first announcements of Oracle about WebUtil told so, but now there is nothing left about it. Any suggestions? Tha
-
Display multiple records in forms 6i
hi every body will anybody plz tell me how to display multiple records in tabular view of forms 6i.for example say i have a field in a block of a form.and i have to display multiple records in another block in the same form depending upon the value o
-
Transfer Data from a Query to DSO
Hello, I have an APD to transfer data from a query to a 'Direct update DSO'. The execution of this APD times out since the volume of query data is very high. Is there an alternate way of transfering data from a query to DSO? Please suggest. Thanks!