Query API to build where clause
Hi All ,
Is there any API in the Netweaver Layer through which i can build open sql where clause by just passing the selection parameter table . I have tried using the cl_rsmds_* api but it doesnot returns correct result in some senario.
With regards,
Saurabh Kumar Pandey .
SELECT *
FROM table_name pr
WHERE ( (pr.status_cid IN (5,86) OR ( pr.org_unit_sid = 3001 AND pr.status_cid IN (25))
{code}
PS: Kindly mark the answers to your post as helpfull/correct if you are satisfied
Edited by: Himanshu Binjola on Apr 23, 2012 9:34 PM
Similar Messages
-
Query Builder - Where Clause - Could not format error using date comparison
We've come across a bug in the Query Builder, under the Create Where Clause tab, if you select a column of Date type plus one of the comparison operators =, !=, <, >, <=, >=, BETWEEN or NOT BETWEEN it displays an error in the Logging Page:
Level: Severe
Source: o.d.r.queryBuilder.SQLGenerator
Message: Could not format :2010-09-02 16:20:31.0
Then under the Show SQL tab it doesn't display the date(s) you selected, e.g.
WHERE LAST_UPDATE BETWEEN AND
Also the View Results tab does not display any results.
You can still press Apply to add the SQL as is to the editor window and from there you have to manually code in the date parameters.
We're using the latest version of SQL Developer 2.1.1.64.45 Windows 32bit version with JDKHi Gordon,
When I add the following lines:
declare @refdt1 date
set @refdt =
/*select 1 from jdt1 t0 where t0.RefDate*/ '[%1]'
declare @refdt2 date
set @refdt =
/*select 1 from jdt2 t0 where t0.RefDate*/ '[%2]'
WHERE T0.RefDate >= @refdt1 and T0.RefDate <= @refdt2
... the error message is now:
Must declare the scalar variable @refdt1
Note: Before adding these lines, the query works perfectly, and returns totals from the whole database (with dynamically generated column headings!)
Thanks
Leon Lai
AMENDED QUERY:
declare @refdt1 date
set @refdt1 =
/*select 1 from jdt1 t0 where t0.RefDate*/ '[%1]'
declare @refdt2 date
set @refdt2 =
/*select 1 from jdt1 t0 where t0.RefDate*/ '[%2]'
--------- I inserted the 6 lines above ---------------------
DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)
SELECT @listCol =
STUFF
( SELECT DISTINCT '],[' + CAST(month(T0.RefDate) AS varchar)
FROM JDT1 T0
FOR XML PATH('')
), 1, 2, ' ') + ']'
SET @query =
'SELECT * FROM
(SELECT Account, month (T0.RefDate) Month , Debit
FROM JDT1 T0
------------------- I add the WHERE clause below --------------------
WHERE T0.RefDate >= @refdt1 and T0.RefDate <= @refdt2
GROUP BY Account, RefDate, Debit
) S
PIVOT
Sum(Debit)
FOR Month IN ('+@listCol+')
) AS pvt'
EXECUTE (@query)
Edited by: LEONLAI on Oct 21, 2011 2:36 PM -
How build where clause in select statement in FM for Virtual provider
Hi
I looking for example of FM for Virtual provider where I find code how assign to select statement "where" clause value from query variable.
In following code how build t_r_custtype range and how assign value to it.
CODE********************************
TYPE-POOLS: abap.
initialize
CLEAR: e_t_data, e_t_msg.
this is specific to infoprovider VIRTPROV
CHECK i_infoprov = 'VIRTPROV'.
FIELD-SYMBOLS: <l_s_sbook> TYPE sbook,
<l_s_data> TYPE ANY.
DATA: l_t_component TYPE abap_compdescr_tab,
l_t_sbook TYPE TABLE OF sbook.
initialize
CLEAR e_t_data.
Data selection / only Business Customer
SELECT * FROM sbook
INTO CORRESPONDING FIELDS OF TABLE l_t_sbook
WHERE custtype in t_r_custtype.
ENDCODE********************************
Thanks a lot
AdamHello,
Would you like fill the ranges in Customer exit for BEx..?
If Yes. please refer the attachment for the whole code...
"Sample code in Customer Exit in BEx"
IF i_step = 2.
CASE i_vnam.
WHEN 'ZDAY_CX'.
LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = 'ZDAY_IN'.
CLEAR: l_s_range.
ZT_DT1 = loc_var_range-low.
ZT_DT2 = loc_var_range-HIGH.
CALL FUNCTION 'DATE_CREATE'
EXPORTING
ANZAHL_JAHRE = 0
ANZAHL_KALTAGE = 0
ANZAHL_MONATE = '-1'
ANZAHL_TAGE = 0
DATUM_EIN = ZT_DT1
DATUM_EIN_ULT = ' '
ULTIMO_SETZEN = ' '
IMPORTING
DATUM_AUS = ZFIDAY .
E_TT =
E_ULTKZ =
CALL FUNCTION 'DATE_CREATE'
EXPORTING
ANZAHL_JAHRE = 0
ANZAHL_KALTAGE = 0
ANZAHL_MONATE = '-1'
ANZAHL_TAGE = 0
DATUM_EIN = ZT_DT2
DATUM_EIN_ULT = ' '
ULTIMO_SETZEN = ' '
IMPORTING
DATUM_AUS = ZLSDAY.
E_TT =
E_ULTKZ =
l_s_range-low = ZFIDAY .
l_s_range-high = ZLSDAY .
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
APPEND l_s_range TO e_t_range.
ENDLOOP.
*****************************************End*************************************
**To get the From date (For Text Variable) as per the user input date interval range**
WHEN 'ZR_S'.
LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = 'ZDAY_IN'.
CLEAR: l_s_range.
ZT_DT1 = loc_var_range-low.
ZT_DT2 = loc_var_range-HIGH.
CALL FUNCTION 'DATE_CREATE'
EXPORTING
ANZAHL_JAHRE = 0
ANZAHL_KALTAGE = 0
ANZAHL_MONATE = 0
ANZAHL_TAGE = 0
DATUM_EIN = ZT_DT1
DATUM_EIN_ULT = ' '
ULTIMO_SETZEN = ' '
IMPORTING
DATUM_AUS = ZFIDAY .
E_TT =
E_ULTKZ =
l_s_range-low0(2) = ZFIDAY6(2).
l_s_range-low+2(1) = '.'.
l_s_range-low3(2) = ZFIDAY4(2).
l_s_range-low+5(1) ='.'.
l_s_range-low6(4) = ZFIDAY0(4).
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
APPEND l_s_range TO e_t_range.
ENDLOOP.
*****************************************End*************************************
Please let me know if any clarification required..
Rinku.. -
Why tree query can't take where clause
I build a tree struncture without where clause , it is fine, but When I tried to add a where clause, I get error, (Warning: Tree root ID "1" not found. ). Does anybody know why?
Here is my SQL
select "ID" id,
"PID" pid,
"NAME" name,
"LINK" link
from CAPACITY_TREE
where branch='CAP'
order by 3Hi,
I'm having a similar problem in APEX 3.01. If you try to create a try using the following query you get the: Warning: Tree root ID "7839" not found error, where 7839 is the "KING" id empno
WITH x AS
(SELECT "EMPNO" ID,
"MGR" pid,
"ENAME" NAME,
NULL LINK,
NULL a1,
NULL a2
FROM "EMP"
where ename = 'JONES')
SELECT x.id, x.pid, x.name, x.link, x.a1, x.a2
FROM xAny ideas as to why we can't put a where clause in a tree? -
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 -
Using Parameters in SQL-Query not only in where clauses
Hi,
I try to use Publisher parameters in the SQL Query from a Data Set.
All of them have default values.
So far, this is no problem, unless I try to use such a parameter value as an ordinary attribute value:
>
select
case when (:pv_Group = 'no') then "DM15D_BETRIEBSTEIL"."BETR_TEIL"
else :pv_some_Text end as Betr_Teil,
case when (:pv_Group = 'no') then "DM15D_BETRIEBSTEIL"."SUVA_NR_FORM"
else :pv_some_Text end as Suva_Nr,
case when (:pv_Group = 'no') then "DM15K_RIS_FAKTEN_PRO_BTT_JHR"."RIS_VOLLBESCH"
else sum("DM15K_RIS_FAKTEN_PRO_BTT_JHR"."RIS_VOLLBESCH") end as Vollbesch
from "GDWH05"
where
"DM15D_BETRIEBSTEIL"."SUVA_NR_FORM" in (:pv_nim100)
fetch first 65001 rows ONLY
>
The parameters 'pv_Group' and 'pv_nim100' are working fine. (when or where clauses)
The parameter 'pv_some_Text' unfortunately not. (simple literals)
When I try to validate the above SQL, I get the following Error:
<font color="red">
java.io.IOException: prepare query failed[nQSError: 43113] Message returned from OBIS. [nQSError: 46033] Datatype: 25 is not supported.
</font>
After use a cast function:
>
else CAST(:pv_some_Text AS CHARACTER)
>
I get this ERROR:
<font color="red">
java.io.IOException: prepare query failed[nQSError: 43113] Message returned from OBIS. [nQSError: 19002] Incorrect use of parameters. The parameters used in CAST cannot be resolved without ambiguity.
</font>
We use OBIEE 11.1.1.6.4 on a Win64-System.
Thank's for any help.Hi Alex,
let's leave away any unnecessary details.
This is the SQL, inserted in the window 'Edit Data Set' of BIP Data Model:
>
select
'--1' as Betr_Teil,
'--2' as Suva_Nr,
sum("GDWH05"."DM15K_RIS_FAKTEN_PRO_BTT_JHR"."RIS_VOLLBESCH") as Vollbesch
from "GDWH05"
where
"DM15D_BETRIEBSTEIL"."SUVA_NR_FORM" in ('122-4.4')
fetch first 65001 rows ONLY
>
Everything is fine when I click OK, the script goes back to the metadata.
Let's try this script with bind values in ORACLE SQL Developer.
This SQL is the physical part, found in the OBIEE-Log (Log level 5), except the bind values. Therefore we find, in the where clause, the join. In the logical sql, we don't have to join, because it's handled in the Common Enterprise Information Model (CEIM)
>
with
sawith0 as
select
sum(t39617.ris_vollbesch) as c1
from
dm15d_betriebsteil t39455,
dm15k_ris_fakten_pro_btt_jhr t39617
where
t39455.id_betriebsteil = t39617.id_betriebsteil
and t39455.suva_nr_form = '122-4.4'
select
d1.c1 as c1,
d1.c2 as c2,
d1.c3 as c3
from
select
:pv_some_text as c1,
:pv_some_text as c2,
sum(d1.c1) as c3
from
sawith0 d1
d1
where
rownum <= 65001
>
This SQL works fine, even with bind values for 'pv_some_text'.
But, when using the following SQL in the BIP Data Model:
>
select
:pv_Text as Betr_Teil,
:pv_Text as Suva_Nr,
sum("GDWH05"."DM15K_RIS_FAKTEN_PRO_BTT_JHR"."RIS_VOLLBESCH") as Vollbesch
from "GDWH05"
where
"DM15D_BETRIEBSTEIL"."SUVA_NR_FORM" in ('122-4.4')
fetch first 65001 rows ONLY
>
The following ERROR occurs:
<font color="red">java.io.IOException: prepare query failed[nQSError: 43113] Message returned from OBIS. [nQSError: 46008] Internal error: File server\Query\Optimizer\ServiceInterfaceMgr\Utility\Src\SQOIUTypeVisitor.cpp, line 643.</font>
In my opinion, either I use a wrong syntax, or BIP has a problem with parsing the script.
Thank you for your most welcome help. -
How to build where clause in this query
Hi all,
Version Details
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Solaris: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
Status_cid filter in the following query should be 3,86,25 for org_unit_sid 3001 and for other organizations it should be 5,86 .
Please let me know how this can be done .
SELECT *
FROM table_name pr
WHERE pr.status_cid IN /*pr.status_cid is number (2) data type * /
((CASE
WHEN pr.org_unit_sid = 3001
THEN (SELECT '5,86,25' -- this is not working
FROM DUAL)
ELSE (SELECT '5,25'
FROM DUAL)
END
I know this can be done using union as follows ..
SELECT *
FROM ((SELECT *
FROM temp pr
WHERE pr.org_uni_sid = 3001 AND pr.status_cid IN (5, 86, 25))
UNION
(SELECT *
FROM temp pr
WHERE pr.org_uni_sid <> 3001 AND pr.status_cid IN (5, 86)))
Any help in this regard is appreciated .............Thanks,
P PrakashSELECT *
FROM table_name pr
WHERE ( (pr.status_cid IN (5,86) OR ( pr.org_unit_sid = 3001 AND pr.status_cid IN (25))
{code}
PS: Kindly mark the answers to your post as helpfull/correct if you are satisfied
Edited by: Himanshu Binjola on Apr 23, 2012 9:34 PM -
Query with date in where clause
hi,
i have build a view with join conditions from 8 tables. the data from this view is more then 100,000
when i run the query with different clause its work with some seconds. but when i put date column in where cluase it sleeps.
eg..
where unit_id = 4 and t_id = 's09' and vb like '%amb%'
works fine.
where unit_id = 4 and t_id = 's09' and vb like '%amb%' and date between dt1 and dt2
now sleep
please ......give me some suggestionshi i have done the explain plan
the result is
Operation Object
SELECT STATEMENT ()
NESTED LOOPS ()
NESTED LOOPS ()
HASH JOIN ()
HASH JOIN ()
TABLE ACCESS (FULL) PR_PO_MST
TABLE ACCESS (FULL) PR_SUPPLIER
TABLE ACCESS (FULL) PR_PO_DTL
TABLE ACCESS (BY INDEX ROWID) INDENT_MST
INDEX (RANGE SCAN) ST_IND_MST_IDX
TABLE ACCESS (BY INDEX ROWID) ST_ITEM
Operation Object
INDEX (UNIQUE SCAN) PK_ST_ITEM
now wot do do???? -
Please help. Thank you for your time and expertise.
Prerequisites: sql query needs to be a view. Real view is more than recursion. It computes location path, is used in JOINs and returns this path.
Problem: no matter what I tried, sql server does not produce 'index seek' when using variable but does with literal.
See full reproduction code below.
I expect that query SELECT lcCode FROM dbo.vwLocationCodes l WHERE l.lcID = @lcID will seek UNIQUE index but it does not.
I tried these:
1. Changing UX and/or PK to be CLUSTERED.
2. query OPTION(RECOMPILE)
3. FORCESEEK on view
4. SQL Server 2012/2014
5. Wrap it into function and CROSS APPLY. On large outer number of rows this just dies, no solution
but to no avail. This smells like a bug in SQL Server. I am seeking your confirmation.
I am thinking it is a bug as variable value is high-cardinality, 1, and query is against unique key. This must produce single seek, depending if clustered or nonclustred index is unique
Thanks
Vladimir
use tempdb
BEGIN TRAN
-- setup definition
CREATE TABLE dbo.LocationHierarchy(
lcID int NOT NULL ,
lcHID hierarchyid NOT NULL,
lcCode nvarchar(25) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
lcHIDParent AS lcHID.GetAncestor(1) PERSISTED,
CONSTRAINT PK_LocationHierarchy_lcID PRIMARY KEY NONCLUSTERED (lcID ASC),
CONSTRAINT UX_LocationHierarchy_pltID_lcHID UNIQUE CLUSTERED (lcHID ASC)
-- add some data
INSERT INTO dbo.LocationHierarchy
VALUES
(1, '/', 'A')
,(2, '/1/', 'B')
,(3, '/1/1/', 'C')
,(4, '/1/1/1/', 'D')
--DROP VIEW dbo.vwLocationCodes
GO
CREATE VIEW dbo.vwLocationCodes
AS
WITH ru AS
SELECT
lh.lcID
,lh.lcCode
,lh.lcHID
,CAST('/' + lh.lcCode + '/' as varchar(8000)) as LocationPath
-- to support recursion
,lh.lcHIDParent
FROM dbo.LocationHierarchy lh
UNION ALL
SELECT
ru.lcID
,ru.lcCode
,ru.lcHID
,CAST('/' + lh.lcCode + ru.LocationPath as varchar(8000)) as LocationPath
,lh.lcHIDParent
FROM dbo.LocationHierarchy lh
JOIN ru ON ru.lcHIDParent = lh.lcHID
SELECT
lh.lcID
,lh.lcCode
,lh.LocationPath
,lh.lcHID
FROM ru lh
WHERE lh.lcHIDParent IS NULL
GO
-- get data via view
SELECT
CONCAT(SPACE(l.lcHID.GetLevel() * 4), lcCode) as LocationIndented
FROM dbo.vwLocationCodes l
ORDER BY lcHID
GO
SET SHOWPLAN_XML ON
GO
DECLARE @lcID int = 2
-- I believe this produces bad plan and is defect in SQL Server optimizer.
-- variable value cardinality is 1 and SQL Server should know that. Optiomal plan is to do index seek with key lookup.
-- This does not happen.
SELECT lcCode FROM dbo.vwLocationCodes l WHERE l.lcID = @lcID -- bad plan
-- this is a plan I expect.
SELECT lcCode FROM dbo.vwLocationCodes l WHERE l.lcID = 2 -- good plan
-- I reviewed these but I need a view here, can't be SP
-- http://sqlblogcasts.com/blogs/tonyrogerson/archive/2008/05/17/non-recursive-common-table-expressions-performance-sucks-1-cte-self-join-cte-sub-query-inline-expansion.aspx
-- http://social.msdn.microsoft.com/Forums/sqlserver/en-US/22d2d580-0ff8-4a9b-b0d0-e6a8345062df/issue-with-select-using-a-recursive-cte-and-parameterizing-the-query?forum=transactsql
GO
SET SHOWPLAN_XML OFF
GO
ROLLBACK
Vladimir MoldovanenkoHere is more... note that I am creating table Items and these can be in Locations.
I am trying LEFT JOIN and OUTER APLLY to 'bend' query into NESTED LOOP and SEEK. There has to be nested loop, 2 rows against 4. But SQL Server fails to generate optimal plan with SEEK. Even RECOMPILE does not help
use tempdb
BEGIN TRAN
-- setup definition
CREATE TABLE dbo.LocationHierarchy(
lcID int NOT NULL ,
lcHID hierarchyid NOT NULL,
lcCode nvarchar(25) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
lcHIDParent AS lcHID.GetAncestor(1) PERSISTED,
CONSTRAINT PK_LocationHierarchy_lcID PRIMARY KEY NONCLUSTERED (lcID ASC),
CONSTRAINT UX_LocationHierarchy_pltID_lcHID UNIQUE CLUSTERED (lcHID ASC)
-- add some data
INSERT INTO dbo.LocationHierarchy
VALUES
(1, '/', 'A')
,(2, '/1/', 'B')
,(3, '/1/1/', 'C')
,(4, '/1/1/1/', 'D')
--DROP VIEW dbo.vwLocationCodes
GO
--DECLARE @Count int = 10;
--WITH L0 AS (SELECT N FROM (VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N (N))-- 10 rows
--,L1 AS (SELECT n1.N FROM L0 n1 CROSS JOIN L0 n2) -- 100 rows
--,L2 AS (SELECT n1.N FROM L1 n1 CROSS JOIN L1 n2) -- 10,000 rows
--,L3 AS (SELECT n1.N FROM L2 n1 CROSS JOIN L2 n2) -- 100,000,000 rows
--,x AS
-- SELECT TOP (ISNULL(@Count, 0))
-- ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) as Number
-- FROM L3 n1
--SELECT Number as itmID, NTILE(4)OVER(ORDER BY Number) as lcID
--INTO dbo.Items
--FROM x
----ORDER BY n1.N
--ALTER TABLE dbo.Items ALTER COLUMN itmID INT NOT NULL
--ALTER TABLE dbo.Items ADD CONSTRAINT PK PRIMARY KEY CLUSTERED (itmID)
CREATE TABLE dbo.Items (itmID int NOT NULL PRIMARY KEY, lcID int NOT NULL)
INSERT INTO dbo.items
VALUES(1, 1)
,(2, 3)
GO
CREATE VIEW dbo.vwLocationCodes
AS
WITH ru AS
SELECT
lh.lcID
,lh.lcCode
,lh.lcHID
,CAST('/' + lh.lcCode + '/' as varchar(8000)) as LocationPath
-- to support recursion
,lh.lcHIDParent
FROM dbo.LocationHierarchy lh
UNION ALL
SELECT
ru.lcID
,ru.lcCode
,ru.lcHID
,CAST('/' + lh.lcCode + ru.LocationPath as varchar(8000)) as LocationPath
,lh.lcHIDParent
FROM dbo.LocationHierarchy lh
JOIN ru ON ru.lcHIDParent = lh.lcHID
SELECT
lh.lcID
,lh.lcCode
,lh.LocationPath
,lh.lcHID
FROM ru lh
WHERE lh.lcHIDParent IS NULL
GO
-- get data via view
SELECT
CONCAT(SPACE(l.lcHID.GetLevel() * 4), lcCode) as LocationIndented
FROM dbo.vwLocationCodes l
ORDER BY lcHID
GO
--SET SHOWPLAN_XML ON
GO
DECLARE @lcID int = 2
-- I believe this produces bad plan and is defect in SQL Server optimizer.
-- variable value cardinality is 1 and SQL Server should know that. Optiomal plan is to do index seek with key lookup.
-- This does not happen.
SELECT lcCode FROM dbo.vwLocationCodes l WHERE l.lcID = @lcID-- OPTION(RECOMPILE) -- bad plan
-- this is a plan I expect.
SELECT lcCode FROM dbo.vwLocationCodes l WHERE l.lcID = 2 -- good plan
SELECT *
FROM dbo.Items itm
LEFT JOIN dbo.vwLocationCodes l ON l.lcID = itm.lcID
OPTION(RECOMPILE)
SELECT *
FROM dbo.Items itm
OUTER APPLY
SELECT *
FROM dbo.vwLocationCodes l
WHERE l.lcID = itm.lcID
) l
-- I reviewed these but I need a view here, can't be SP
-- http://sqlblogcasts.com/blogs/tonyrogerson/archive/2008/05/17/non-recursive-common-table-expressions-performance-sucks-1-cte-self-join-cte-sub-query-inline-expansion.aspx
-- http://social.msdn.microsoft.com/Forums/sqlserver/en-US/22d2d580-0ff8-4a9b-b0d0-e6a8345062df/issue-with-select-using-a-recursive-cte-and-parameterizing-the-query?forum=transactsql
GO
--SET SHOWPLAN_XML OFF
GO
ROLLBACK
Vladimir Moldovanenko -
SQL QUERY How to write a sql query with a complex where clause.
I would like to get a list of all my invoices from the past year plus any open invoices that are more than a year old.
I don't want any overlapping rows.
Debra has a questionDebra,
Sorry but you have posted to a forum that deals exclusively with questions/issues about customizing and programming Microsoft Project, a planning and scheduling application. I suggest you delete this post and find a more appropriate forum.
John -
Query SQL datastore with XML where clause source
Hope I am in the right place. New to Bus Obj Data Services Designer....I have cerated xml schemas, added it to the page as an xml source in. Mapped a test xml file and all is well there. I have added a query that grabs the xml.
I need to then query the MS SQL datastore ans use the data form the xml query as the where clause. How is this done? Or do I put a query on the datastore for all the data in a table then do anotehr query filtering one with the other? seems like that would be rather heavy and low performance. The results will then be sent back out as xml (schema and test file already set up as an xml out)
Thanks!Thanks for the tips.
I'm trying to implement this option, using your ViewDefHelper.
I´m running into a problem though. After I create my dynamic View Object using a ViewDef, I need to create some view links.
So I get the AttributeDefs of the columns (source, and destination) from the method findAttributeDef (which is the whole purpose of performance in my post). This method is returning the correct Attribute Def, but when I create the view Link with the method createViewLinkBetweenViewObjects(java.lang.String vlName,
java.lang.String accessorName,
ViewObject master,
AttributeDef[] srcAttrs,
ViewObject detail,
AttributeDef[] destAttrs,
java.lang.String assocClause)
My destination query is generating the where clause as:
null = ?
Any Ideas what I'm doing wrong ?
Thanks again.
John. -
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 -
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||'''%'''; -
Not able to set the where clause params
Hi,
My version of apps is 12.1.3.
I created a page with a searchRN and resultRN (LinesVO). (Not a query/view link) . I am passing the id from header to the VO to restrict the linesVO
The controller correctly passes the id from searchRN to AM, but in AM, the where clause is not set and I am not getting the desired result:
My AM Code:
public void InvokeGo(String Hdrval)
LineVOImpl LineVO1 = getLineVO1();
LineVO1.setWhereClauseParams(null); // Always reset
System.out.println("AMIMPL:Hdrval = "+ Hdrval);
<prints the header_Value which is passed from CO>
if (Hdrval == null
System.out.println("Inside Null If");
String message = "Please provide atleast one input to any of these search field";
throw new OAException(message, OAException.ERROR);
else
System.out.println("Not All Parameters are Null.Building Where Clause");
< prints the line above>
LineVO1.setWhereClause
("Header_name = :1");
System.out.println("Paremeter Set are: Header_name:"+Hdrval);
<prints the above line like : Paremeter Set are: Header_name:Hdr_Name_1
LineVO1.setWhereClauseParam(0,Hdrval);
System.out.println("Inside MainAM invokeGO Method:"+LineVO1.getQuery());
< prints:Inside MainAM invokeGO Method:SELECT * FROM (select LINE_ID,hdr.HEADER_ID,LINE_NUMBER,LINE_NAME,Attach,hdr.header_name from xxtr_hdr hdr, xxtr_line line
where hdr.header_id=line.header_id) QRSLT WHERE (Header_name = :1)>
LineVO1.executeQuery();
The issue is in the SQL build. I guess after setting the where clause, it should appear like :
QRSLT WHERE (Header_name = "Hdr_Name_1"
ThanksHu Sumit,
I am doing that:
LineVO1.setWhereClauseParam(0,Hdrval);
before executequery. I even hard coded
LineVO1.setWhereClauseParam(0,"XXXX");
but still it din't work. I guess I am missing something small. because I have done this thing a lot of times earlier and it had worked. -
Creating WHERE clause for an outer join using DatabaseFilter
Hi all,
I read a post on thie group about constructing the WHERE clause for a RowSet Controls
SQL Query using the DatabaseFilter and this is what it said:
****************************************************************************The
following example shows adding part of a WHERE clause in an action method of a
page flow:
DatabaseFilter.FilterTerm term = new DatabaseFilter.FilterTerm(); term.sColumnName
= "name"; term.op = DatabaseFilter.opContains; // there are ops for equals, less
than, etc... term.value = form.getPartialName();
// You can also add sort terms for an ORDER BY clause allNames = dbControl.getNames(new
DatabaseFilter(new DatabaseFilter.FilterTerm[] {term}, null));
I am trying to create a where clause which uses a join like this:
Select * from x,y where x.id=y.id (+)
ie. All values from x.id but only corrosponding ones from y.id.
Is there any way to build this outer join query using the DatabaseFilter class
or am i forced to use a String which is contruct in my page flow as the where
clause?like so:
* @jc:sql command-type="grid"
* rowset-name="RFPSRowSet"
* max-rows="1000"
* statement::
* SELECT RFPS.RFP_ID,RFPS.NAME AS RFP_NAME,RFPS.FFO_NUMBER,RFPS.RFP_TYPE,RFPS.CFDA_NUMBER,COMPETITIONS.NAME
AS COMP_NAME,COMPETITIONS.COMPETITION_ID FROM RFPS,COMPETITIONS WHERE {sql: whereClause
} {sql: filter.getOrderByClause ()}
public RowSet getAllRfps(java.lang.String whereClause,DatabaseFilter filter)
throws SQLException;
and in my pageFlow action, i do the following:
StringBuffer whereClause= new StringBuffer();
whereClause.append("RFPS.RFP_ID = COMPETITIONS.RFP_ID (+)");
if ((form.getRfpTitle() != null) &&
(!form.getRfpTitle().equalsIgnoreCase("")))
whereClause.append(" AND UPPER(RFPS.NAME) LIKE %"+form.getRfpTitle().toUpperCase());
if ((form.getCfdaNumber() != null) &&
(!form.getCfdaNumber().equalsIgnoreCase("")))
whereClause.append(" AND RFPS.CFDA_NUMBER ="+form.getCfdaNumber());
if ((form.getFfoNumber() != null) &&
(!form.getFfoNumber().equalsIgnoreCase("")))
whereClause.append(" AND RFPS.FFO_NUMBER ="+form.getFfoNumber());
sortFilterService = SortFilterService.getInstance(getRequest());
DatabaseFilter filter=sortFilterService.getDatabaseFilter(getGridName());
log.debug("***********"+whereClause.toString()+"***********");
allRows = searchRfaAndComp.getAllRfps(whereClause.toString(),filter);
Thanks in advance for your help,
Regards,
Vik.Thanks for your reply. Just one more question....if we indeed are trying to use
a simple query and have a where clause like "select * from x where upper(x) like
{x}", how do we set the UPPER filter on the column using the database filter?
I see a IDENTIFIER.ISUPPER static field on that DatabaseFilter but am unsure how
to use it. Would appreciate any pointers .
Thanks again,
Vik
Eddie O'Neil <[email protected]> wrote:
Vik--
I believe that the approach that you describe below is the best one
for dealing with outer joins
with the DatabaseFilter.
Apologies for the limitation...
Eddie
vik wrote:
Hi all,
I read a post on thie group about constructing the WHERE clause fora RowSet Controls
SQL Query using the DatabaseFilter and this is what it said:
****************************************************************************The
following example shows adding part of a WHERE clause in an actionmethod of a
page flow:
DatabaseFilter.FilterTerm term = new DatabaseFilter.FilterTerm(); term.sColumnName
= "name"; term.op = DatabaseFilter.opContains; // there are ops forequals, less
than, etc... term.value = form.getPartialName();
// You can also add sort terms for an ORDER BY clause allNames = dbControl.getNames(new
DatabaseFilter(new DatabaseFilter.FilterTerm[] {term}, null));
I am trying to create a where clause which uses a join like this:
Select * from x,y where x.id=y.id (+)
ie. All values from x.id but only corrosponding ones from y.id.
Is there any way to build this outer join query using the DatabaseFilterclass
or am i forced to use a String which is contruct in my page flow asthe where
clause?like so:
* @jc:sql command-type="grid"
* rowset-name="RFPSRowSet"
* max-rows="1000"
* statement::
* SELECT RFPS.RFP_ID,RFPS.NAME AS RFP_NAME,RFPS.FFO_NUMBER,RFPS.RFP_TYPE,RFPS.CFDA_NUMBER,COMPETITIONS.NAME
AS COMP_NAME,COMPETITIONS.COMPETITION_ID FROM RFPS,COMPETITIONS WHERE{sql: whereClause
sql: filter.getOrderByClause ()}* ::
public RowSet getAllRfps(java.lang.String whereClause,DatabaseFilter
filter)
throws SQLException;
and in my pageFlow action, i do the following:
StringBuffer whereClause= new StringBuffer();
whereClause.append("RFPS.RFP_ID = COMPETITIONS.RFP_ID (+)");
if ((form.getRfpTitle() != null) &&
(!form.getRfpTitle().equalsIgnoreCase("")))
whereClause.append(" AND UPPER(RFPS.NAME) LIKE %"+form.getRfpTitle().toUpperCase());
if ((form.getCfdaNumber() != null) &&
(!form.getCfdaNumber().equalsIgnoreCase("")))
whereClause.append(" AND RFPS.CFDA_NUMBER ="+form.getCfdaNumber());
if ((form.getFfoNumber() != null) &&
(!form.getFfoNumber().equalsIgnoreCase("")))
whereClause.append(" AND RFPS.FFO_NUMBER ="+form.getFfoNumber());
sortFilterService = SortFilterService.getInstance(getRequest());
DatabaseFilter filter=sortFilterService.getDatabaseFilter(getGridName());
log.debug("***********"+whereClause.toString()+"***********");
allRows = searchRfaAndComp.getAllRfps(whereClause.toString(),filter);
Thanks in advance for your help,
Regards,
Vik.
Maybe you are looking for
-
Hi, am going to generate an HTML report for a table by using below code SET heading off SET pagesize 80 SET MARKUP HTML ON SPOOL ON HEAD "<TITLE>Job Comparison Report</title> - STYLE TYPE='TEXT/CSS'><!--BODY {background: ffffc6} --></STYLE>" SET ECHO
-
Red light appears over my iphone speaker when charging.
i accidentally washed my phone. So i decided to do the rice treatment.and now when i put it on the charger a red light appears over my speaker. Also when i try to hard reset my phone the red light just flashes.Then after a while the light just goes a
-
Insert into a clob field in a procedure based form
Hi, I have a table with a clob field. I wrote a procedure to insert into this table. Then I built a form based on this procedure. Here is my code: drop table clob_test; create table clob_test(id NUMBER, note CLOB); insert into clob_test values(10,emp
-
Making podcasts show as "speech" when changing the genre; not working
I download a lot of podcasts that I want to keep. I have gone into "get info" and changed the genre to "speech" to be consistent with some other similar info I have in my collection. It appears to change the status to "speech" but the episodes still
-
Hello all, Can we send drawing copy to our supplier's email id directly from purchase order through work business ( wrok flow ) If it is possible then please let me know the steps. thanking you,