Issue with Outer Join (Possible Bug)
Hi,
I am using Toplink 10.3.3 with oracle as db. I noticed that if I use outer joins with collections, then toplink doesnt add (+) sign to the where clause of the collection.
For e.g. for a relationship - Employee has projects, if I do an outer join on projects and also provide a where clause for projects collection, the query doesnt include the (+) sign in it.
Expression expr = builder.anyOfAllowingNone("projects").getAllowingNull("anotherOne-OneMapping").get("attr").equal("Value")
This expr goes in the where clause and TopLink does not generate (+) in the query alongside attr = "Value"
I have tried this from workbench as well as Java. Could anyone please confirm that the above scenario works? May be this is a bug in toplink !
TIA
Ani
I too have found a few bugs with full outer joins. Many of them have been fixed in 9iR2 though.
Like this one simple one on unpatched 9iR1: select foo1.x, foo2.x
from foo1 full outer join (select * from foo2 where x = :bindx) foo2 on (foo1.y = foo2.y)
ERROR at line 2:
ORA-00600: internal error code, arguments: [qctcte1], 0], [], [], [], [], [], []Fixed here: Hdr: 2458655 9.0.1.3.0 RDBMS 9.0.1.3.0 SQL LANGUAGE PRODID-5 PORTID-453
Abstract: ORA-600 [QCTECTE1] ON QUERY WITH FULL OUTER JOIN AND BIND VARIABLES
Similar Messages
-
i have bought a used macbook, to bad i do not have the admin password. is there any way to bypass this issue with out the Mac OS X disk? (without loosing my obtained files?) I NEED HELP BADLY PLEASE....
What version of the Mac OS X are you running. Go to the Apple in the upper left corner and select About This Mac and post the version.
-
How to poll a blob using db adapter, with outer joins condition
Hi All,
We are trying to poll tables which contain column types as long and blob, we are using relationships in adapter and kept outer joins. by this we got select distinct t1.document .....etc
distinct keyword cannot be used for blobs.
is there any way to poll these tables having blob column types with outer joins.
thanks a lot in advance,
RRHi,
Procedure will be an explicit Invoke not Polling. If you can alter you design such that your BPEL process instead of polling gets triggered by some external entity (Java, PL/SQL, Scheduler, another BPEL etc.), you can put the data fetching logic in the procedure and call this procedure from your BPEL process to get the data. And your BPEL process is called periodically at an interval by an external entity.
Also see if you can restrict the duplicate records at the database level itself. Polling, AFAIK, is limited in terms of customization and wouldn't be easy to customize. However, would like to learn a way if someone has.
Regards,
Neeraj Sehgal -
Issue with recursive join and filter records
I am having an issue with recursive join and filtering records for the following rules. The table, sample records, test script and rules are as below
drop table PC_COVKEY_PD;
create table PC_COVKEY_PD (
PC_COVKEY varchar(50),
COVERAGE_NUMBER varchar(3),
SEQUENCE_ALPHA varchar(3),
TRANSACTION_TYPE varchar(3),
COV_CHG_EFF_DATE date,
TIMESTAMP_ENTERED timestamp
delete from PC_COVKEY_PD;
commit;
Insert into PC_COVKEY_PD values ('10020335P8017MT0010012','001','001','02',to_date('01/FEB/2010','DD/MON/RRRR'),to_timestamp('02/JAN/2010 01:55:59.990216 AM','DD/MON/RRRR HH12:MI:SS.FF6 AM'));
Insert into PC_COVKEY_PD values ('10020335P8017MT0050012','005','001','02',to_date('01/FEB/2010','DD/MON/RRRR'),to_timestamp('02/JAN/2010 01:56:00.268099 AM','DD/MON/RRRR HH12:MI:SS.FF6 AM'));
Insert into PC_COVKEY_PD values ('10020335P8017MT0010032','001','003','03',to_date('14/JAN/2011','DD/MON/RRRR'),to_timestamp('14/JAN/2011 04:25:19.018217 PM','DD/MON/RRRR HH12:MI:SS.FF6 AM'));
Insert into PC_COVKEY_PD values ('10020335P8017MT0010042','001','004','03',to_date('21/JAN/2011','DD/MON/RRRR'),to_timestamp('21/JAN/2011 04:00:31.719444 PM','DD/MON/RRRR HH12:MI:SS.FF6 AM'));
Insert into PC_COVKEY_PD values ('10020335P8017MT0050022','005','002','03',to_date('21/JAN/2011','DD/MON/RRRR'),to_timestamp('21/JAN/2011 04:02:48.953594 PM','DD/MON/RRRR HH12:MI:SS.FF6 AM'));
commit;
--select * from PC_COVKEY_PD order by COV_CHG_EFF_DATE,TIMESTAMP_ENTERED;
PC_COVKEY COVERAGE_NUMBER SEQUENCE_ALPHA TRANSACTION_TYPE COV_CHG_EFF_DATE TIMESTAMP_ENTERED
10020335P8017MT0010012 001 001 02 01/FEB/2010 02/JAN/2010 01:55:59.990216 AM
10020335P8017MT0050012 005 001 02 01/FEB/2010 02/JAN/2010 01:56:00.268099 AM
10020335P8017MT0010032 001 003 03 14/JAN/2011 14/JAN/2011 04:25:19.018217 PM
10020335P8017MT0010042 001 004 03 21/JAN/2011 21/JAN/2011 04:00:31.719444 PM
10020335P8017MT0050022 005 002 03 21/JAN/2011 21/JAN/2011 04:02:48.953594 PM
*/Rule;
Every PC_COVKEY, query should recursively join and generate set of records depending on latest SEQUENCE_ALPHA for the coverage number at that point of time. For ex,
for 10020335P8017MT0010042 (4 row) should generate 2 records
1. 10020335P8017MT0010042001004 (PC_COVKEY || COVERAGE_NUMBER || latest SEQUENCE_ALPHA--004 for cover 001), SEQUENCE_ALPHA 001 for cover 001 is not the latest for 10020335P8017MT0010042.
2. 10020335P8017MT0010042005001 (coverage number 005, and latest sequence alpha-001 for cover 005).
SEQUENCE_ALPHA 002 for cover 005 is not the latest for 10020335P8017MT0010042 as it happened later stage.
for 10020335P8017MT0050022 (5 row) should generate 2 records as
1. 10020335P8017MT0050022001004 (PC_COVKEY || COVERAGE_NUMBER || latest SEQUENCE_ALPHA--004 for cover 001),
2. 10020335P8017MT0010042005002 (coverage number 005, and latest sequence alpha-002 for cover 005)
WITH SNAPSHOT_CVR_CTP as (
SELECT pcd1.PC_COVKEY,
pcd1.PC_COVKEY||pcd2.COVERAGE_NUMBER||pcd2.SEQUENCE_ALPHA as cov_key,
pcd2.COVERAGE_NUMBER,
pcd2.SEQUENCE_ALPHA,
pcd2.COVERAGE_NUMBER||pcd2.SEQUENCE_ALPHA as CVRSEQ,
max(pcd2.COVERAGE_NUMBER||pcd2.SEQUENCE_ALPHA) over (partition by pcd1.PC_COVKEY, pcd1.COVERAGE_NUMBER
order by pcd2.COV_CHG_EFF_DATE, pcd2.TIMESTAMP_ENTERED) as MaxSeq,
pcd2.COV_CHG_EFF_DATE,
pcd2.TIMESTAMP_ENTERED
FROM
PC_COVKEY_PD pcd1,
PC_COVKEY_PD pcd2
select * from SNAPSHOT_CVR_CTP SC
WHERE sc.PC_COVKEY = '10020335P8017MT0010042' -- 4 row
--AND COVERAGE_NUMBER||SC.MAXSEQ = COVERAGE_NUMBER||SEQUENCE_ALPHA
ORDER BY TIMESTAMP_ENTERED
PC_COVKEY COV_KEY COVERAGE_NUMBER SEQUENCE_ALPHA CVRSEQ MAXSEQ COV_CHG_EFF_DATE TIMESTAMP_ENTERED
10020335P8017MT0010042 10020335P8017MT0010042001001 001 001 001001 001001 01/FEB/2010 02/JAN/2010 01:55:59.990216 AM
10020335P8017MT0010042 10020335P8017MT0010042005001 005 001 005001 005001 01/FEB/2010 02/JAN/2010 01:56:00.268099 AM
10020335P8017MT0010042 10020335P8017MT0010042001003 001 003 001003 005001 14/JAN/2011 14/JAN/2011 04:25:19.018217 PM
10020335P8017MT0010042 10020335P8017MT0010042001004 001 004 001004 005001 21/JAN/2011 21/JAN/2011 04:00:31.719444 PM
10020335P8017MT0010042 10020335P8017MT0010042005002 005 002 005002 005002 21/JAN/2011 21/JAN/2011 04:02:48.953594 PM
I am trying to filter row using MAXSEQ but at the moment MAXSEQ values are not coming as expected. I expect following value for COV_KEY combination
COV_KEY MAXSEQ
10020335P8017MT0010042001001 001004
10020335P8017MT0010042005001 005001 -- match
10020335P8017MT0010042001003 001004
10020335P8017MT0010042001004 001004 -- match
10020335P8017MT0010042005002 005001Would appreciate if anyone can get MAxSEQ as expected.Something like..
with dist_cov_numbers as
select distinct coverage_number cov_number
from PC_COVKEY_PD
all_data as
select pcd.*,d.cov_number new_coverage_number,
max(decode(coverage_number,d.cov_number,sequence_alpha))
over( partition by d.cov_number
order by COV_CHG_EFF_DATE,TIMESTAMP_ENTERED
) max_seq
from PC_COVKEY_PD pcd,dist_cov_numbers d
select pc_covkey,pc_covkey||new_coverage_number||max_seq new_key,
pc_covkey||coverage_number||sequence_alpha actual_key
from all_data
order by COV_CHG_EFF_DATE, TIMESTAMP_ENTERED;
PC_COVKEY NEW_KEY ACTUAL_KEY
10020335P8017MT0010012 10020335P8017MT0010012001001 10020335P8017MT0010012001001
10020335P8017MT0010012 10020335P8017MT0010012005 10020335P8017MT0010012001001
10020335P8017MT0050012 10020335P8017MT0050012001001 10020335P8017MT0050012005001
10020335P8017MT0050012 10020335P8017MT0050012005001 10020335P8017MT0050012005001
10020335P8017MT0010032 10020335P8017MT0010032001003 10020335P8017MT0010032001003
10020335P8017MT0010032 10020335P8017MT0010032005001 10020335P8017MT0010032001003
10020335P8017MT0010042 10020335P8017MT0010042005001 10020335P8017MT0010042001004
10020335P8017MT0010042 10020335P8017MT0010042001004 10020335P8017MT0010042001004
10020335P8017MT0050022 10020335P8017MT0050022005002 10020335P8017MT0050022005002
10020335P8017MT0050022 10020335P8017MT0050022001004 10020335P8017MT0050022005002
10 rows selected Edited by: jeneesh on Nov 22, 2012 10:54 AM -
Help requried with outer joins
Hi All,
I neeed a query help can any one please help me getting this done,
for the below query
select trunc(assumed_time_sql) AS date1,sum(rp.rebate_due)as sum1 from mn_date_dim dd ,mn_rebate_payment rp,mn_prc_program prc,mn_structured_doc sd
where trunc(assumed_time_sql) in (TO_DATE('01-JUL-10','dd-mon-yy'),add_months(TO_DATE('01-JUL-10','dd-mon-yy'),-3),add_months(TO_DATE('01-JUL-10','dd-mon-yy'),-6),add_months(TO_DATE('01-JUL-10','dd-mon-yy'),-9))----input parameter
AND trunc(dd.assumed_time_sql)=TRUNC(rp.start_date)
AND prc.prc_program_id=rp.tiered_rebate_id
AND sd.struct_doc_id=prc.struct_doc_id
AND sd.struct_doc_id_num='M0000763'----input parameter
group by trunc(assumed_time_sql);
I am getting output as
date1 sum1
01-JAN-10 10
01-APR-10 15
01-JUL-10 20
But i want my output to be as
date1 sum1
01-JAN-10 10
01-APR-10 15
01-JUL-10 20
01-OCT-09 NULL
I have tried with outer joins but this didn't help me
Can any one please give me help in getting this done
ThanksHi,
As SB pointed out, you'd better provide tables and data in order to be helped more efficiently.
Anyway, you may want to investigate the use of NVL and/or DECODE so that you can translate NULL into valid values so they are returned to your select statement.
HTH,
Thierry
Handle: p78
Status Level: Newbie (10)
Registered: Mar 9, 2009
Total Posts: 60
Total Questions: 35 (30 unresolved) Be kind to share your helpful / correct threads with other with marking them as ANSWERED
Edited by: Urgent-IT on Feb 13, 2011 11:00 AM -
Generate a where clause with outer join criteria condition: (+)=
Hi,
In my search page, I use Auto Customization Criteria mode, and I build where clause by using get Criteria():
public void initSrpQuery(Dictionary[] dic, String userName) {
int dicSize = dic.length;
StringBuffer whereClause = new StringBuffer(100);
Vector parameters = new Vector(5);
int clauseCount = 0;
int bindCount = 1;
for(int i=0; i < dicSize; i++){
String itemName = (String)(dic.get(OAViewObject.CRITERIA_ITEM_NAME));
Object value = dic[i].get(OAViewObject.CRITERIA_VALUE);
String joinCondition = (String)dic[i].get(OAViewObject.CRITERIA_JOIN_CONDITION);
String criteriaCondition = (String)dic[i].get(OAViewObject.CRITERIA_CONDITION);
String criteriaDataType = (String)dic[i].get(OAViewObject.CRITERIA_DATATYPE);
String viewAttributename = (String)dic[i].get(OAViewObject.CRITERIA_VIEW_ATTRIBUTE_NAME);
String columnName = findAttributeDef(viewAttributename).getColumnNameForQuery();
if((value != null) /*&& (!("".equals((String).trim())))*/){
if(clauseCount > 0){
whereClause.append(" AND ");
whereClause.append(columnName + " " + criteriaCondition + " :");
whereClause.append(++bindCount);
parameters.addElement(value);
clauseCount++;
If I want to generate following where clause:
select
,emp.name
,emp.email
,emp.salesrep_number
,comp.name
,gs.srp_goal_header_id
,gs.status_code
,gs.start_date
,gs.end_date
from g2c_goal_shr_emp_assignments_v emp
,jtf_rs_salesreps rs
,xxg2c_srp_goal_headers_all gs
,cn_comp_plans_all comp
where 1 = 1
and rs.salesrep_id = gs.salesrep_id (+)
and gs.comp_plan_id = comp.comp_plan_id (+)
and gs.period_year (+) = :1 -- :1 p_fiscal_year
How can I generate a where clause with outer join : gs.period_year (+) = :1 ? Will I get '(+)=' from get(OAViewObject.CRITERIA_CONDITION)?
thanks
LeiIf you are using SQL-Plus or Reports you can use lexical parameters like:
SELECT * FROM emp &condition;
When you run the query it will ask for value of condition and you can enter what every you want. Here is a really fun query:
SELECT &columns FROM &tables &condition;
But if you are using Forms. Then you have to change the condition by SET_BLOCK_PROPERTY.
Best of luck! -
Group by sum doesn't work with outer join. Can anyone please help me to get it right?
I've posted some sample data and queries below:
CREATE TABLE COMPLAINT
CNO NUMBER,
REASON VARCHAR2(15 BYTE),
TOTAL NUMBER
Insert into COMPLAINT
(CNO, REASON, TOTAL)
Values
(1, 'edge', 250);
Insert into COMPLAINT
(CNO, REASON, TOTAL)
Values
(2, 'edge', 250);
Insert into COMPLAINT
(CNO, REASON, TOTAL)
Values
(3, 'brst', 300);
Insert into COMPLAINT
(CNO, REASON, TOTAL)
Values
(4, 'crea', 400);
COMMIT;
CREATE TABLE SCOTT.COMPLAINTROLL
CNO NUMBER,
ROLL VARCHAR2(15 BYTE)
SET DEFINE OFF;
Insert into COMPLAINTROLL
(CNO, ROLL)
Values
(2, 'roll22');
Insert into COMPLAINTROLL
(CNO, ROLL)
Values
(1, 'roll4');
Insert into COMPLAINTROLL
(CNO, ROLL)
Values
(1, 'roll3');
Insert into COMPLAINTROLL
(CNO, ROLL)
Values
(1, 'roll2');
Insert into COMPLAINTROLL
(CNO, ROLL)
Values
(1, 'roll1');
COMMIT;
select * from complaint
CNO REASON TOTAL
1 edge 250
2 edge 250
3 brst 300
4 crea 400
select * from complaintroll
CNO ROLL
1 roll1
1 roll2
1 roll3
1 roll4
2 roll22
-- total of reason code edge is 500
select reason,sum(total)
from complaint c
group by reason
REASON SUM(TOTAL)
brst 300
crea 400
edge 500
-- total of reason code edge after outer join is 1250
select reason,sum(total)
from complaint c,complaintroll cr
where c.cno=cr.cno(+)
group by reason
REASON SUM(TOTAL)
brst 300
crea 400
edge 1250
{\code}
Thanks for reading this post.The problem that you described is simple. The outer join duplicates all the rows from the parent table (complaint). If you want to sum a column from the parent table, then this sum includes all the duplicated rows.
There are several solutions for this problem.
A) One had been shown already by Cenutil. Instead of doing an outer join, you can do a subquery in the select clause that delivers the additional information from the detail table.
SQL> select reason,
sum(total),
sum((select count(*) from complaintroll cr where c.cno=cr.cno)) cnt_rolls
from complaint c
group by c.reason;
REASON SUM(TOTAL) CNT_ROLLS
crea 400 0
brst 300 0
edge 500 5b) sum in two steps. First sum and count including the join criteria, then use this information to calculate the correct total sum.
SQL> select reason, sum(stotal), sum(stotal/scount), sum(scount), sum(cnt_rolls)
2 from (select reason, sum(total) stotal, count(*) scount, count(cr.cno) cnt_rolls
3 from complaint c
4 left join complaintroll cr on c.cno=cr.cno
5 group by reason, c.cno
6 )
7 group by reason;
REASON SUM(STOTAL) SUM(STOTAL/SCOUNT) SUM(SCOUNT) SUM(CNT_ROLLS)
crea 400 400 1 0
brst 300 300 1 0
edge 1250 500 5 5
sql> c) another option is to do the left join, but do the aggregation only one time for the parent table. Analytic functions are helpful for that. However since analytic fuinctions can't be used inside an aggregation function, we would again need an inline view.
SQL> select reason, sum(case when rn = 1 then total end) sum_total, count(*), count(crcno)
2 from (select row_number() over (partition by c.reason order by c.cno) rn,
3 c.*, cr.cno crcno
4 from complaint c
5 left join complaintroll cr on c.cno=cr.cno
6 )
7 group by reason;
REASON SUM_TOTAL COUNT(*) COUNT(CRCNO)
brst 300 1 0
crea 400 1 0
edge 250 5 5
SQL> Edited by: Sven W. on Feb 10, 2011 1:00 PM - formatting + column added to 2nd option -
Update with Outer Join, round 2
Thanks for those of you who helped me out on the first one (I never thought that you could use a one-row SELECT like that).
However, here is a new version of my problem:
I have three tables.
Table_1 has a column that needs to be updated based on values in Table_2 and Table_3.
Both Table_1 and Table_2 have values used to determine which Table_3 row to use.
However, not every Table_1 row has a corresponding Table_3 row, in which case the Table_3 value to use is assumed to be 1.
The tables and corresponding columns are:
TABLE_1
value_1 - the value to be updated
key_2 - a pointer to TABLE_2
key_3a - a pointer to TABLE_3, or a dummy value if there is no corresponding TABLE_3 record
TABLE_2
key_2 - the primary key
key_3b - a secondary pointer to TABLE_3
value_2 - a value to be used in calculating TABLE_1.value_1
TABLE_3
key_3a - the first part of the unique key
ley_3b - the second part of the unique key
value_3 - a value to be used in calculating TABLE_1.value_1
If there is a row in table_3 that matches the table_1.key_3a and table_2.key_3b values (where table_2.key_2 = table_1.key_2):
set table_1.value_1 = table_2.value_2 * table_3.value_3
If there is no such row in table_3:
set table_1.value_1 = table_2.value_2
I want to do something like this:
UPDATE table_1 t1
SET value_1 =
SELECT t2.value_2 * NVL(t3.value_3, 1)
FROM table_2 t2
LEFT JOIN table_3 t3
ON (t3.key_3b = t2.key_3b and t3.key_3a = t1.key_3a)
WHERE t2.key_2 = t1.key_2
However, Oracle does not allow t1 to be referenced in the ON clause of the outer join.
(Assume that every key_2 value in table_1 is in table_2 as well - it is only the key_3 value that can be a dummy.)
If I move "t3.key_3 = t1.key_3" to the WHERE clause, then t1.value_1 is null for rows without the corresponding table_3 value.
I can do it with a clone of table_1 using ROWIDs:
UPDATE table_1 t1
SET value_1 =
SELECT t2.value_2 * NVL(t3.value_3, 1)
FROM table_1 t1a
JOIN table_2 t2
ON t2.key_2 = t1a.key_2
LEFT JOIN table_3 t3
ON (t3.key_3b = t2.key_3b and t3.key_3a = t1a.key_3a)
WHERE t1a.row_id = t1.row_id
However, is there an easier way to do this using ANSI joins (i.e. without (+) syntax)?
I have this feeling I am missing something reasonably obvious here.ddelgran wrote:
Thanks for those of you who helped me out on the first one (I never thought that you could use a one-row SELECT like that).
I want to do something like this:
UPDATE table_1 t1
SET value_1 =
SELECT t2.value_2 * NVL(t3.value_3, 1)
FROM table_2 t2
LEFT JOIN table_3 t3
ON (t3.key_3b = t2.key_3b and t3.key_3a = t1.key_3a)
WHERE t2.key_2 = t1.key_2
However, Oracle does not allow t1 to be referenced in the ON clause of the outer join.
(Assume that every key_2 value in table_1 is in table_2 as well - it is only the key_3 value that can be a dummy.)
If I move "t3.key_3 = t1.key_3" to the WHERE clause, then t1.value_1 is null for rows without the corresponding table_3 value.
I can do it with a clone of table_1 using ROWIDs:
UPDATE table_1 t1
SET value_1 =
SELECT t2.value_2 * NVL(t3.value_3, 1)
FROM table_1 t1a
JOIN table_2 t2
ON t2.key_2 = t1a.key_2
LEFT JOIN table_3 t3
ON (t3.key_3b = t2.key_3b and t3.key_3a = t1a.key_3a)
WHERE t1a.row_id = t1.row_id
However, is there an easier way to do this using ANSI joins (i.e. without (+) syntax)?
I have this feeling I am missing something reasonably obvious here.You might want to refer to my post in your original thread how to use join views in updates. You can use ANSI join syntax there, too:
Re: Update with Outer Join
You would end up with something like this (note: untested):
UPDATE
SELECT t1.value_1, t2.value_2 * NVL(t3.value_3, 1) as new_val
FROM table_1 t1
INNER JOIN table_2 t2 ON (t2.key_2 = t1.key_2)
LEFT JOIN table_3 t3
ON (t3.key_3b = t2.key_3b and t3.key_3a = t1.key_3a)
SET value_1 = new_val;And again the same restrictions regarding key-preserved tables apply as described in the post referred to.
Regards,
Randolf
Oracle related stuff blog:
http://oracle-randolf.blogspot.com/
SQLTools++ for Oracle (Open source Oracle GUI for Windows):
http://www.sqltools-plusplus.org:7676/
http://sourceforge.net/projects/sqlt-pp/ -
Getting an error called Invalid relational Operator
SELECT DISTINCT t1.recv_order_no, t2.reference_no
FROM receiving_order t1, receiver_num t2
WHERE TRIM(t2.reference_no) (+) = TRIM (t1.recv_order_no)
ORDER BY t2.reference_no ASC
What I am doing wrong here ?
Can I use trim fun with outer join ?
Thanks for help.
SriniHi Srini,
I have done this with emp and dept
Following is an example:
1 select a.deptno, b.ename
2 from dept a, emp b
3* where trim(a.deptno) = trim(b.deptno(+))
scott>/
DEPTNO ENAME
10 CLARK
10 KING
10 GHULAM
10 MILLER
20 SMITH
20 ADAMS
20 FORD
20 SCOTT
20 JONES
30 ALLEN
30 BLAKE
30 MARTIN
30 JAMES
30 TURNER
30 WARD
40Hope this helps
Ghulam -
How to use common object from two tables with out join.
HI,
I have two tables called A & B In A table i have the following objects
1.weekend
2.S1(measure)
3.S2(measure)
4.S3(measure)
5.S4(measure)
And In B table i have followning columns
1.week end
2.p1(measure)
3.p2(measure)
4.p3(measure)
5.p4(measure)
Now in universe i created all the measure objects i.e.s1,s2,s3,s4,p1,p2,p3,p4 A.weekend,B.weekend.
instead of using week end two times i wnt to use only once because this is common in both table.
if i use join between these tables i am getting values fine
But With out join is there any thing to do in universe level to create common objects to use from both the tables..I tried using aggregate awareness but while reporting it is taking as two SQL.which is not synchronized.
Please help me on this ...hi,
Although Weekend column is present in both tables, by creating a single Object in Universe, Universe can identify relationship with only table referenced in Object Creation.
So, there will be no identification of relationship with other table measures.
Obviously, you need to create 2 Weekend objects in Universe (in two classes).
Case 1: You need not join these two tables in Universe. When you create 2 Queries in WEBI, automatcially Weekend objects are synchronized (if both are of same datatype)
Case 2: If you join these two tables in Universe, Obviously,
your SQL may contain Weekend from Table1, measures from Table 2
or
your SQL may contain Weekend from Table2, measures from Table 1
Finally, You need to create 2 objects in Universe. But your query may contain a single Object based on Case 2.
Regards,
Vamsee -
Problem with outer joins and the class indicator/discriminator
Hello,
I am having a problem defining a query in toplink (10.1.3.3).
In the workbench, I have created a parent and 2 child descriptors. The parent is "AbstractValue", the children are "DefaultValue", classified by the discriminator 'DEF', and "OverrideValue", classified by 'OVR', both located in the same table.
Another descriptor (containing a one-on-one mapping to both a "DefaultValue", and a "OverrideValue") needs to be queried for its 'value'.
The way the query should act is: If an override value (row) exists, this one applies for that object. If an override doesn't exist, return the default value.
The query then comes down to (as I have it now):
builder.getAllowingNull("OverrideValue").getAllowingNull("value").ifNull(builder.get("DefaultValue").get("value")).equal(builder.getParameter(VALUE_PARAM));
The problem is that toplink adds the distinction for the different kind of "values" in the where clause WITHOUT checking for null values e.g. it performs an outer join, but then still checks for the discriminator value thus
....t1.ovr_id = t2.id(+) AND t2.discriminator = 'OVR' AND ...
instead of
... LEFT JOIN values t2 ON (t1.ovr_id = t2.id AND t2.discriminator = 'OVR') ...
This leads to the behaviour that the query returns ONLY the objects that have override and default values.
An overview of the queries (simplified)
Toplink, at the moment, returns only results if both override and default values exists:
SELECT t1.id
t1.def_id,
t1.ovr_id
FROM values t2,
parameter t1,
values t0
WHERE nvl(t2.value, t0.value) = 15 AND
t1.ovr_id = t2.id(+) AND t2.discriminator = 'OVR' AND
t1.def_id = t0.id AND t0.discriminator = 'DEF'
Situation Wanted:
SELECT t1.id
t1.def_id,
t1.ovr_id
FROM parameter t1
LEFT JOIN values t2 ON (t1.ovr_id = t2.id AND t2.discriminator = 'OVR')
JOIN values t0 ON (t1.def_id = t0.id AND t0.discriminator = 'DEF')
WHERE nvl(t2.value, t0.value) = 15
Anyone know if there is some statement I am missing to allow an actual outer join on descriptors containing class indicators/discriminators? A possible rewrite?
Thanks in advance,
RudyThis is a bug in TopLink's outer join support for Oracle. Currently the outer join is put in the where clause, instead of the from clause, as we do on other platforms. You might be able to fix it by changing your OraclePlatform to return false for shouldPrintOuterJoinInWhereClause().
Please log this bug on EclipseLink, or through Oracle technial support.
There is a workaround using,
descriptor.getInhertiancePolicy().setAlwaysUseOuterJoinForClassType(true);
James : http://www.eclipselink.org -
Oracle.jbo.RowAlreadyDeletedException with outer join
Hi,
I have created a VO, based on an EO, with an outer join present.
The first time I query my data (search) everything goes well, but when I perform a search the second time, I receive the error message: "oracle.apps.fnd.framework.OAException: oracle.jbo.RowAlreadyDeletedException: JBO-25019: Entiteitsrij van sleutel oracle.jbo.Key[202 53162 ] not found in XxpostMmpParametersEO."
The reason why is because of the outer join there is no 1 to 1 relationship between the EO and the VO. However for the first time , it works fine.
Does someone have an idea how I can avoid the error for my second search action?
Thanks in advance!
br
GuyHi all,
the following article:
http://radio.weblogs.com/0123729/stories/2003/05/15/entityObjectOverTableWhosePrimaryKeyMayBeNull.html
suggest a possible workaround. It wok fine, but it is not generic! :((
By
Alessandro -
Is it possible to do an update that involves an outer join on the table being updated?
Here's what I mean - currently, I have something like:
UPDATE table_1 t1
SET col_1 =
SELECT t2.col_2
FROM table_2 t2
WHERE t2.t1_key = t1.t1_key
WHERE EXISTS
SELECT t2.*
FROM table_2 t2
WHERE t2.t1_key = t1.t1_key
UPDATE table_1 t1
SET col_1 = 0
WHERE NOT EXISTS
SELECT t2.*
FROM table_2 t2
WHERE t2.t1_key = t1.t1_key
Yes, I could do set all of the table_1.col_1 values = 0 first, and then do the first update, but it is inefficient given the number of records in the table that would be updated twice.
Is there a way of combining these two updates into a single update statement?You could simply use your first update and omit the WHERE EXISTS clause since you want to update all the rows in table_1 anyway.
If the subquery finds a match, it will update with the selected value. Normally, a non-match would set the column to a null but you can solve that with NVL:
SQL> select * from table_1;
T1_KEY COL_1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
9 rows selected.
SQL> select * from table_2;
T2_KEY COL_2
1 9
3 9
5 9
SQL> UPDATE table_1 t1
2 SET col_1 = nvl (
3 (SELECT t2.col_2
4 FROM table_2 t2
5 WHERE t2.t2_key = t1.t1_key
6 ),0
7 )
8 ;
9 rows updated.
SQL> select * from table_1;
T1_KEY COL_1
1 9
2 0
3 9
4 0
5 9
6 0
7 0
8 0
9 0
9 rows selected. -
How to create a condition with out join
Hi all,
I m using Oracle Discovere Desktop. I want to know that how can i use outer join in conditions.
e.u.
category(+) = 'E'
RegardsHi,
Actually i want to use both equi join and outer join in my one worksheet I have discussed with Micheal and he told me that this is not possible. Because whenever you create more then one condition between two same folders then you have to choose only one condition prompted by Desktop during creation of worksheet.
Anyway thanks for reply.
Best Regards,
Hassan -
Problem with outer join with filter on join column
Hi,
In physical layer I have one dimension and two facts, and there's an outer join between the facts.
dim_DATE ,
fact_1 ,
fact_2
Joins:
dim_DATE inner join fact_1 on dim_DATE.DATE = fact_1.DATE
fact_1 left outer join fact_2 on fact_1.DATE = fact_2.DATE and fact_1.SOME_ID = fact_2.SOME_ID
When I run a report with a date as a filter, OBIEE executes "optimized" physical SQL:
select fact1.X, fact2.Y
from
Fact_1 left outer join on fact_1.DATE = fact_2.DATE and fact_1.SOME_ID = fact_2.SOME_ID
where Fact_1.DATE = TO_DATE('2009-05-28' , 'YYYY-MM-DD' )
and Fact_2.DATE = TO_DATE('2009-05-28' , 'YYYY-MM-DD')
The filter on Fact_2.DATE effectively replaces outer join with inner.
Is there a way to disable this "optimization", which is actually very good for inner joins, but doesn't allow outer joins?
Thanks in advance,
Alex
Edited by: AM_1 on Aug 11, 2009 8:20 AMIf you want to perform a Fact-based partitioning with OBIEE (two fact with the same dimension), you have to :
* create in your physical layer for each fact table the joins with the dimension
* create in the Business Model layer ONE star schema with ONE logical fact table containing the columns of your two physical fact table
In this way when you choose minimal one column of your fact1 and one column of your fact2, OBIEE will perform two query against each fact table/dimension, join them with an OUTER JOIN and your problem will disappear.
Cheers
Nico
Maybe you are looking for
-
I have two scanners (Canon Canoscan 3200 F, Lexmark X1190) connected to a PowerMac G4 (Mac OS X 10.4.11) via Firewire (the Canon) and USB (the Lexmark). In Image Capture I set up to share both the scanners. They appear on my MacBook Pro which is conn
-
The wheel that shows your downloading something on my iPhone 5 will not stop spinning. What can I do to stop it? I have shut down all apps, restarted my phone as well I have pushed the power button & home button at the same time. Still no luck.
-
HT201210 trying to update my phone
I am trying to update my iphone and I keep recieving an error message telling me there is no connection to my phone's server.
-
Illustrator freezes when opening
When I try to open illustrator trial it freezes at "updating font menu...90%"
-
My Nokia E71 automatically deleted/removed some in...
Good afternoon all. I had recently purchased a Nokia E71 and installed quite a bit of applications: From themes to instant chat Java based midlets signed and unsigned to various java based games (jar/jad). The problem is that my phone has some-how au