Issue with union all in sql
Hi All,
I have a requirement as below.
SELECT 'A' AS 'XXX' FROM DUAL
UNION ALL
SELECT 'B' AS 'XXX' FROM DUAL
I need to check in such a way in my second sql query if 'B'='A' then i need to print 'A' else 'B' , means in my second query i need to compare the value of XXX with the first query value of XXX if it is same then i need to print first query's value of XXX or else need to print second queries XXX value.
Please help me on this
user13424229 wrote:
Hi All,
I have a requirement as below.
SELECT 'A' AS 'XXX' FROM DUAL
UNION ALL
SELECT 'B' AS 'XXX' FROM DUAL
I need to check in such a way in my second sql query if 'B'='A' then i need to print 'A' else 'B' , means in my second query i need to compare the value of XXX with the first query value of XXX if it is same then i need to print first query's value of XXX or else need to print second queries XXX value.
Please help me on thisYour quesiton is not very clear, I would suggest you read {message:id=9360002}.
If you are looking at a way to see the next or previous row from your current row then you can use LEAD or LAG analytical function. They are well documented. You can read all about it there.
Similar Messages
-
Hola everyboy,
I want that one user who hasn`t permiss for edit sql, can do a select with UNION ALL when he want.
Sometimes he want do selects with UNION, only UNION:
Select adress FROM TABLE WHERE Column='PEPE'
UNION
Select adress FROM TABLE2 WHERE Column='PEPE'
and sometimes he want do selects with UNION ALL:
Select adress FROM TABLE WHERE Column='PEPE'
UNION ALL
Select adress FROM TABLE2 WHERE Column='PEPE'
I have seen that if I edit the parameter <Parameter Name="UNION">UNION</Parameter> in sqlsrv.prm in local machine I could use UNION ALL but this is for ALL selects that I do.
Is there any other way that I can use?
Thanks!!Hello Cesar,
please post in what product you are working that we can point youi to teh right forum.
Crystal Reports Designer ? Universe Designer ?
Thanks
Falk -
Materalized view with union all and fast referesh
I have a one view which is very slow. in this view we are joining many tables and many union all queries.
now I am planing to make materalized view
Tell me how i will created view with fast refresh with union all query.
Pls help its urgent..
Thanks
ReenaRefer to the Replication Manual for the create syntax and exceptions.
-
Report which concatenates 13 views with union all running slowly
Oracle 8.1.7 windows 2000 server
I am trying to improve the performance of a report which is comprised of 13 views.
When I run each of the views individually, the total run time for the views is less than 5 minutes. When I run the report, it takes 28 minutes.
Can anyone suggest why the extra time is being taken?
To reiterate:
select a,b from c; (executes in 10 seconds)
select d, e from f (executes in 3 seconds)
select x, y from z (executes in 1 minute)
total runs time = 5 minutes
However,
select a,b from c
union all
select d, e from f
union all
select x, y from z (executes in 28 minutes)
The execution plans do not change between the report and the indiividual views. Views are being concatenated with union all so no sorting is taking place
Many thanks,
Jason Parker.
Edited by: jclparker on Feb 18, 2009 4:26 AM
Edited by: jclparker on Feb 18, 2009 4:30 AMCould you post the execution plan? Please use formatting tags to save the white space while posting the plan.
-
Inconsistent SQL results when using View with UNION-ALL and table function
Can any of you please execute the below scripts and check the output. In the table type variable, I am adding 4 distinct object ids, where as in the result, I get only the row pertaining to last id in the table type variable. Same row is returned 4 times (4= number of values in the table type).
This scenario is occurring in our product with a SQL with exactly same pattern. I could simulate the same issue with the sample script I have provided.
Database version: 11.2.0.3 Enterprise Edition, Single node
Thank you.
CREATE TABLE TEMP_T1 AS SELECT * FROM ALL_OBJECTS;
CREATE TABLE TEMP_T2 AS SELECT * FROM ALL_OBJECTS;
UPDATE TEMP_T2 SET OBJECT_ID = OBJECT_ID * 37;
CREATE UNIQUE INDEX TEMP_T1_U1 ON TEMP_T1(OBJECT_ID);
CREATE UNIQUE INDEX TEMP_T2_U1 ON TEMP_T2(OBJECT_ID);
CREATE OR REPLACE VIEW TEMP_T1T2_V AS
SELECT * FROM TEMP_T1 UNION ALL SELECT * FROM TEMP_T2;
CREATE OR REPLACE TYPE TEMP_OBJ_TYPE AS OBJECT (OBJ_ID NUMBER);
CREATE OR REPLACE TYPE TEMP_OBJ_TAB_TYPE IS TABLE OF TEMP_OBJ_TYPE;
SET SERVEROUTPUT ON;
DECLARE
TYPE TEMP_T1T2_V_ROW_TAB_TYPE IS TABLE OF TEMP_T1T2_V%ROWTYPE;
TEMP_T1T2_V_ROW_TAB TEMP_T1T2_V_ROW_TAB_TYPE;
TEMP_OBJ_TAB TEMP_OBJ_TAB_TYPE := TEMP_OBJ_TAB_TYPE();
PROCEDURE ADD_TO_TEMP_OBJ_TAB(OBJ_ID IN NUMBER) IS
BEGIN
TEMP_OBJ_TAB.EXTEND;
TEMP_OBJ_TAB(TEMP_OBJ_TAB.LAST) := TEMP_OBJ_TYPE(OBJ_ID);
END;
BEGIN
ADD_TO_TEMP_OBJ_TAB(100);
ADD_TO_TEMP_OBJ_TAB(116);
ADD_TO_TEMP_OBJ_TAB(279);
ADD_TO_TEMP_OBJ_TAB(364);
DBMS_OUTPUT.PUT_LINE('=====================');
FOR I IN TEMP_OBJ_TAB.FIRST..TEMP_OBJ_TAB.LAST
LOOP
DBMS_OUTPUT.PUT_LINE('OBJ_ID = '||TEMP_OBJ_TAB(I).OBJ_ID);
END LOOP;
DBMS_OUTPUT.PUT_LINE('---------------------');
SELECT * BULK COLLECT INTO TEMP_T1T2_V_ROW_TAB
FROM TEMP_T1T2_V VW
WHERE ((VW.OBJECT_ID) IN (SELECT OBJ_ID
FROM TABLE(CAST(TEMP_OBJ_TAB AS TEMP_OBJ_TAB_TYPE))));
FOR I IN TEMP_OBJ_TAB.FIRST..TEMP_OBJ_TAB.LAST
LOOP
DBMS_OUTPUT.PUT_LINE('OBJ_ID = '||TEMP_OBJ_TAB(I).OBJ_ID);
END LOOP;
DBMS_OUTPUT.PUT_LINE('---------------------');
IF TEMP_T1T2_V_ROW_TAB.COUNT > 0 THEN
FOR I IN TEMP_T1T2_V_ROW_TAB.FIRST..TEMP_T1T2_V_ROW_TAB.LAST
LOOP
DBMS_OUTPUT.PUT_LINE(TEMP_T1T2_V_ROW_TAB(I).OBJECT_ID||' : '||TEMP_T1T2_V_ROW_TAB(I).OBJECT_NAME);
END LOOP;
ELSE
DBMS_OUTPUT.PUT_LINE('NO ROWS RETURNED!');
END IF;
DBMS_OUTPUT.PUT_LINE('---------------------');
END;
/I can reproduce it:
SQL*Plus: Release 11.2.0.3.0 Production on Tue Oct 30 14:05:39 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter user-name: scott
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select *
2 from v$version
3 /
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for 64-bit Windows: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
SQL> CREATE TABLE TEMP_T1 AS SELECT * FROM ALL_OBJECTS;
Table created.
SQL>
SQL> CREATE TABLE TEMP_T2 AS SELECT * FROM ALL_OBJECTS;
Table created.
SQL>
SQL> UPDATE TEMP_T2 SET OBJECT_ID = OBJECT_ID * 37;
72883 rows updated.
SQL>
SQL> CREATE UNIQUE INDEX TEMP_T1_U1 ON TEMP_T1(OBJECT_ID);
Index created.
SQL>
SQL> CREATE UNIQUE INDEX TEMP_T2_U1 ON TEMP_T2(OBJECT_ID);
Index created.
SQL>
SQL> CREATE OR REPLACE VIEW TEMP_T1T2_V AS
2 SELECT * FROM TEMP_T1 UNION ALL SELECT * FROM TEMP_T2;
View created.
SQL>
SQL> CREATE OR REPLACE TYPE TEMP_OBJ_TYPE AS OBJECT (OBJ_ID NUMBER)
2 /
Type created.
SQL> CREATE OR REPLACE TYPE TEMP_OBJ_TAB_TYPE IS TABLE OF TEMP_OBJ_TYPE
2 /
Type created.
SQL> SET SERVEROUTPUT ON;
SQL>
SQL> DECLARE
2 TYPE TEMP_T1T2_V_ROW_TAB_TYPE IS TABLE OF TEMP_T1T2_V%ROWTYPE;
3 TEMP_T1T2_V_ROW_TAB TEMP_T1T2_V_ROW_TAB_TYPE;
4 TEMP_OBJ_TAB TEMP_OBJ_TAB_TYPE := TEMP_OBJ_TAB_TYPE();
5 PROCEDURE ADD_TO_TEMP_OBJ_TAB(OBJ_ID IN NUMBER) IS
6 BEGIN
7 TEMP_OBJ_TAB.EXTEND;
8 TEMP_OBJ_TAB(TEMP_OBJ_TAB.LAST) := TEMP_OBJ_TYPE(OBJ_ID);
9 END;
10 BEGIN
11 ADD_TO_TEMP_OBJ_TAB(100);
12 ADD_TO_TEMP_OBJ_TAB(116);
13 ADD_TO_TEMP_OBJ_TAB(279);
14 ADD_TO_TEMP_OBJ_TAB(364);
15 DBMS_OUTPUT.PUT_LINE('=====================');
16 FOR I IN TEMP_OBJ_TAB.FIRST..TEMP_OBJ_TAB.LAST
17 LOOP
18 DBMS_OUTPUT.PUT_LINE('OBJ_ID = '||TEMP_OBJ_TAB(I).OBJ_ID);
19 END LOOP;
20 DBMS_OUTPUT.PUT_LINE('---------------------');
21 SELECT * BULK COLLECT INTO TEMP_T1T2_V_ROW_TAB
22 FROM TEMP_T1T2_V VW
23 WHERE ((VW.OBJECT_ID) IN (SELECT OBJ_ID
24 FROM TABLE(CAST(TEMP_OBJ_TAB AS TEMP_OBJ_TAB_TYPE))));
25 FOR I IN TEMP_OBJ_TAB.FIRST..TEMP_OBJ_TAB.LAST
26 LOOP
27 DBMS_OUTPUT.PUT_LINE('OBJ_ID = '||TEMP_OBJ_TAB(I).OBJ_ID);
28 END LOOP;
29 DBMS_OUTPUT.PUT_LINE('---------------------');
30 IF TEMP_T1T2_V_ROW_TAB.COUNT > 0 THEN
31 FOR I IN TEMP_T1T2_V_ROW_TAB.FIRST..TEMP_T1T2_V_ROW_TAB.LAST
32 LOOP
33 DBMS_OUTPUT.PUT_LINE(TEMP_T1T2_V_ROW_TAB(I).OBJECT_ID||' : '||TEMP_T1T2_V_ROW_TAB(I).OBJECT_NAME);
34 END LOOP;
35 ELSE
36 DBMS_OUTPUT.PUT_LINE('NO ROWS RETURNED!');
37 END IF;
38 DBMS_OUTPUT.PUT_LINE('---------------------');
39 END;
40 /
=====================
OBJ_ID = 100
OBJ_ID = 116
OBJ_ID = 279
OBJ_ID = 364
OBJ_ID = 100
OBJ_ID = 116
OBJ_ID = 279
OBJ_ID = 364
364 : I_AUDIT
364 : I_AUDIT
364 : I_AUDIT
364 : I_AUDIT
PL/SQL procedure successfully completed.
SQL> column object_name format a30
SQL> select object_id,
2 object_name
3 from dba_objects
4 where object_id in (100,116,279,364)
5 /
OBJECT_ID OBJECT_NAME
100 ORA$BASE
116 DUAL
279 MAP_OBJECT
364 I_AUDIT
SQL> Works fine in:
=====================
OBJ_ID = 100
OBJ_ID = 116
OBJ_ID = 279
OBJ_ID = 364
OBJ_ID = 100
OBJ_ID = 116
OBJ_ID = 279
OBJ_ID = 364
100 : ORA$BASE
116 : DUAL
364 : SYSTEM_PRIVILEGE_MAP
279 : MAP_OBJECT
PL/SQL procedure successfully completed.
SQL> select object_id,
2 object_name
3 from dba_objects
4 where object_id in (100,116,279,364)
5 /
OBJECT_ID OBJECT_NAME
100 ORA$BASE
116 DUAL
364 SYSTEM_PRIVILEGE_MAP
279 MAP_OBJECT
SQL> select *
2 from v$version
3 /
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL>SY.
Edited by: Solomon Yakobson on Oct 30, 2012 2:14 PM -
Updatable Materialized View with Union ALL
(please don't ask about db structure)
DB: 11gR2
create table table_1 (
id number primary key,
val varchar2(100)
create table table_2 (
id number primary key,
val varchar2(100)
insert into table_1(id) values (0);
insert into table_1(id) values (2);
insert into table_1(id) values (3);
insert into table_1(id) values (4);
insert into table_1(id) values (5);
insert into table_2(id) values (10);
insert into table_2(id) values (12);
insert into table_2(id) values (13);
insert into table_2(id) values (14);
insert into table_2(id) values (15);
update table_1 set val='Table1 val:'||id;
update table_2 set val='Table2 val:'||id;
create view v_table_all as
select * from table_1
view V_TABLE_ALL created.
select * from v_table_all;
ID VAL
0 Table1 val:0
2 Table1 val:2
3 Table1 val:3
4 Table1 val:4
5 Table1 val:5
select column_name, updatable, insertable, deletable
from user_updatable_columns
where table_name = 'V_TABLE_ALL'
COLUMN_NAME UPDATABLE INSERTABLE DELETABLE
ID YES YES YES
VAL YES YES YES
update v_table_all set val='XXX changed' where id = 3;
1 row updated.
select * from table_1;
ID VAL
0 Table1 val:0
2 Table1 val:2
3 XXX changed
4 Table1 val:4
5 Table1 val:5
rollback;
select * from table_1;
ID VAL
0 Table1 val:0
2 Table1 val:2
3 Table1 val:3
4 Table1 val:4
5 Table1 val:5
create or replace view v_table_all as
select * from table_1
union select * from table_2;
view V_TABLE_ALL created.
select * from v_table_all;
ID VAL
0 Table1 val:0
2 Table1 val:2
3 Table1 val:3
4 Table1 val:4
5 Table1 val:5
10 Table2 val:10
12 Table2 val:12
13 Table2 val:13
14 Table2 val:14
15 Table2 val:15
select column_name, updatable, insertable, deletable
from user_updatable_columns
where table_name = 'V_TABLE_ALL'
COLUMN_NAME UPDATABLE INSERTABLE DELETABLE
ID NO NO NO
VAL NO NO NO
trying update:
update v_table_all set val='XXX changed' where id = 3;
SQL-Fehler: ORA-01732: Datenmanipulationsoperation auf dieser View nicht zulässig
01732. 00000 - "data manipulation operation not legal on this view"
*Cause:
*Action:
drop view v_table_all;
view V_TABLE_ALL dropped.all is ok before this point.
now we want create a new materialized view with some query
create materialized view v_table_all
as
select * from table_1
union all select * from table_2 ;
materialized view V_TABLE_ALL created.
select column_name, updatable, insertable, deletable
from user_updatable_columns
where table_name = 'V_TABLE_ALL'
COLUMN_NAME UPDATABLE INSERTABLE DELETABLE
ID YES YES YES
VAL YES YES YES it seems to be ok with update.
but...
update v_table_all set val='XXX changed' where id = 3;
SQL-Fehler: ORA-01732: Datenmanipulationsoperation auf dieser View nicht zulässig
01732. 00000 - "data manipulation operation not legal on this view"
*Cause:
*Action:How can solve this issue??
Any suggestionLooks like user_updatable_columns sort of thinks the MV is just a table - I don't know about that...
An MV on a single table can be updated - I tried that and it works:
create materialized view mv_table_1 for update
as
select * from table_1;I noticed [url http://download.oracle.com/docs/cd/E11882_01/server.112/e16579/advmv.htm#sthref294]examples stating the UNION ALL needs a "marker" so Oracle can know from the data which source table a row in the MV originates from - like this:
create materialized view v_table_all for update
as
select 'T1' tab_id, table_1.* from table_1
union all
select 'T2' tab_id, table_2.* from table_2 ;But that also fails (the "marker" requirement was specifically for FAST REFRESH, so it was just a long shot ;-) )
What are you planning to do?
<li>Create the MV.
<li>Update records in the MV - which then is no longer consistent with the source data.
<li>Schedule a complete refresh once in a while - thereby overwriting/losing the updates in the MV.
If that is the case, I suggest using a true table rather than an MV.
<li>Create table t_table_all as select ... .
<li>Update records in the table - which then is no longer consistent with the source data.
<li>Schedule a job to delete table and insert into table select ... once in a while - thereby overwriting/losing the updates in the table.
In other words a kind of "do it yourself MV".
I cannot see another way at the moment? But perhaps try in the data warehousing forum - the people there may have greater experience with MV's ;-) -
Creating M.V on time with union all
Hi,
Here i am creating a M.V and i want refresh this on time(example every day 12.00)
create materialized view log on emp
with primary key
including new values;
create materialized view log on dept
with primary key
including new values;
create materialized view emp_dept_new
refresh on (what ever)
as select deptno from emp
union all
select deptno from dept;when i am executing the last script i am getting some error.
Please help me in this issue very argent .............
Thanks
SKPR.SKPR wrote:
Hi,
Here i am creating a M.V and i want refresh this on time(example every day 12.00)
create materialized view log on emp
with primary key
including new values;
create materialized view log on dept
with primary key
including new values;
create materialized view emp_dept_new
refresh on (what ever)
as select deptno from emp
union all
select deptno from dept;when i am executing the last script i am getting some error.You will do as "(what ever)" isn't valid syntax.
Please help me in this issue very argent .............Not for us it's not.
If you expect help, post your actual code and post the error message you're getting. We're not mind readers, so "some error" means nothing to us. -
Improve performance with union all
Hello there,
Oracle Database 11g Release 11.1.0.7.0 - 64bit Production
PL/SQL Release 11.1.0.7.0 - Production
SQL> show parameter optimizer
ORA-00942: Tabel of view bestaat niet. (Does not exist)I have the following query using the following input variables
- id
- startdate
- enddate
The query has the following format
- assume that the number of columns are the same
- t1 != t3 and t2 != t4
select ct.*
from
select t1.*
from tabel1 t1
join tabel2 t2
on t2.key = t1.key
union all
select t3.*
from tabel3 t3
join tabel4 t4
on t4.key = t3.key
where ct.id = :id
and ct.date >= :startdate
and ct.date < :enddate
order by ct.dateIt is performing really slow, after the first read it performs fast.
I tried the following thing, which was actually even slower!
with t1c as
select t1.*
from tabel1 t1
join tabel2 t2
on t2.key = t1.key
where t1.id = :id
and t1.date >= :startdate
and t1.date < :enddate
t2c as
select t3.*
from tabel3 t3
join tabel4 t4
on t4.key = t3.key
where t3.id = :id
and t3.date >= :startdate
and t3.date < :enddate
select ct.*
from
select *
from t1c
union all
select *
from t2c
order by ct.dateSo in words, I have an 'union all' construction reading from different tables with matching columns 'id' and 'date'.
How can I improve this? Can it be improved? If you do not know the answer, but maybe a suggestion, I will be happy aswell!!!
Thanks in advance!
Kind regards,
Metroickha>
So in words, I have an 'union all' construction reading from different tables with matching columns 'id' and 'date'.
How can I improve this? Can it be improved? If you do not know the answer, but maybe a suggestion, I will be happy aswell!!!
>
If you want to improve on what Oracle is doing you first need to know 'what Oracle is doing'.
Post the execution plans for the query that show what Oracle is doing.
Also post the DDL for the tables and indexes and the record counts for the tables and ID/DATE predicates. -
Oracle doc inconsistent on materialize view with union all and self joins
First of all, I can't seem to create a materialized view containing self-joins AND union all. Is it possible?
I checked Oracle 9i (my version: PL/SQL Release 9.2.0.4.0 - Production) documentation and I get different answers (or so it seems to me).
First I saw this: "The COMPATIBILITY parameter must be set to 9.0 if the materialized aggregate view has inline views, outer joins, self joins or grouping sets and FAST REFRESH is specified during creation..."
Did you see the part about 'self joins' in there? I did and I was pumped because that seems to say that you CAN have 'self joins' (and my compatibility is 9.2...)
BUT
In the very same document I also found "Oracle does not allow self-joins in materialized join views." (rage)
You can see the document I am speaking of here: http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96520/mv.htm#574889
Whenever I try to create the mview I get the following error. (
In any caseORA-01446 cannot select ROWID from view with DISTINCT, GROUP BY, etc.First of all, I can't seem to create a materialized view containing self-joins AND union all. Is it possible?
I checked Oracle 9i (my version: PL/SQL Release 9.2.0.4.0 - Production) documentation and I get different answers (or so it seems to me).
First I saw this: "The COMPATIBILITY parameter must be set to 9.0 if the materialized aggregate view has inline views, outer joins, self joins or grouping sets and FAST REFRESH is specified during creation..."
Did you see the part about 'self joins' in there? I did and I was pumped because that seems to say that you CAN have 'self joins' (and my compatibility is 9.2...)
BUT
In the very same document I also found "Oracle does not allow self-joins in materialized join views." (rage)
You can see the document I am speaking of here: http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96520/mv.htm#574889
Whenever I try to create the mview I get the following error. (
In any caseORA-01446 cannot select ROWID from view with DISTINCT, GROUP BY, etc. -
Different results using View with union all in 11R1 compared to 10R2
Hello,
I have the following situation:
In Oracle 10R2 I defined a view which looks like this
create view test_view
as
select 'field1;field2;field3' field from dual
union all
select field
from (
select tfield1||';'||tfield2||';'||tfield3 field
from table1
order by tfield1,tfield2,tfield3
The idea is, my first line contains a header information an then the data in the required sorting order.
So, in 10R2, when I export the view with select field from test_view, I get the result as expected, which means, the header from the part with the dual was in the first line and after that, the data in the required sort order.
Now, in 11.1.0.7, it is completely different, because the row of the dual is somewhere in my result set. But if I send the sql instead of the view, I get the expected result as in 10R2.
I have no idea why this is the case now, because in 10R2 this was working permanently as expected. When I look at the execution plan, I see, that he starts parallelisation, which is ok, but the difference is, that in this parallelisation the select from dual is included and in 10R2 he first make the line from the dual and then the parallelisation with the data. It's not clear to me, that if I send the sql to the database I see the required result, but if i define the view as mentioned, and start a select field from view, I get now get the different sorting, because of the parallelisation, where the optimizer he changes his behavior comparing the both database versions. So my question ist, how can I change this behavior to get the same behavior as in release 10R2.
Best regards
RainerHello,
thank you for your sample, I see your idea for my sorting purpose.
I want to look at the following point:
I create the table, as you described. The table has the degree and instances 1. Now I deefine the following view:
create view view_test
as
select 'field1;field2;field3' field
from dual
union all
select tfield1 || ';' || tfield2 || ';' || tfield3 field
from (select * from table1 order by tfield1,tfield2).
This is the way I used it in 10 R2.
Now, the SQL select field from view_test delivers the expected result:
field1;field2;field3
a;b;c
d;e;f
So far so good. But now, I changed the degree of the table1 (alter table table1 parallel (degree 4 instances 1);).
The result looks like that:
a;b;c
field1;field2;field3
d;e;f
So, the parallelisation of my object seems to be the reason for the, in my eyes, "wrong" sort order. In 10R2 I used this degree and instance values for my table and defined a view and it was working fine. Now, after our migration, I had this "trouble". For me it seems, that the optimizer made some changes, or mabe this is a bug, who knows ?
I also tried, to change the nls_comp, and set the undocumented parameters as described in the Metalink note 7497640.8, but with no effect of my result set.
Best regards
Rainer -
Error creating materilalized view with union all
Could please anybody advice? What I do wrong?
create table test
i number not null,
constraint pk_test primary key( i ));
create materialized view log on test with rowid;
create materialized view mvtest refresh fast on demand as
SELECT i, 1 umarker FROM test where i < 10000
UNION ALL SELECT i, 2 umarker FROM test where i > 10000;
ORA-12052: cannot fast refresh materialized view MVTEST
It looks like I accomplished all fast refresh requirements, didn't I?
Thanks a lot.
Alexander.SQL> create table test
2 (i number not null,
3 constraint pk_test primary key( i ));
Table created.
SQL> create materialized view log on test with rowid;
Materialized view log created.
SQL> create materialized view mvtest refresh fast on demand as
2 SELECT t.i, 1 umarker, t.rowid row_id FROM test t where t.i <= 10000
3 UNION ALL
4 SELECT t.i, 2 umarker, t.rowid row_id FROM test t where t.i > 10000;
Materialized view created.(This is on 11.2) -
Interactive Report with union all in the query
I have an interactive report with the following query in the report region:
select property,saddr1,upostdate,sotherdate1,journal_control-1000000000,account,sdesc,uref,
suserdefined1,trans_notes,samount,detail_notes
from journal_entries
union all
select property,saddr1,upostdate,sotherdate1,journal_control-700000000,account,sdesc,uref,
suserdefined1,trans_notes,stotalamount,detail_notes
from charge_entries;
This gets translated as listed below during runtime. I am trying to pass a value to both SELECT statements instead of the just the bottom select statement. Is this possible using interactive reports.
select
PROPERTY,
SADDR1,
UPOSTDATE,
SOTHERDATE1,
ACCOUNT,
SDESC,
UREF,
SUSERDEFINED1,
TRANS_NOTES,
SAMOUNT,
DETAIL_NOTES,
"JOURNAL_CONTROL-1000000000" "JOURNAL_CONTROL-1000000000"
from (
select property,saddr1,upostdate,sotherdate1,journal_control-1000000000,account,sdesc,uref,
suserdefined1,trans_notes,samount,detail_notes
from journal_entries
union all
select property,saddr1,upostdate,sotherdate1,journal_control-700000000,account,sdesc,uref,
suserdefined1,trans_notes,stotalamount,detail_notes
from charge_entries
) r
where ("PROPERTY" = :APXWS_EXPR_1)
0.14: IR binding: ":APXWS_EXPR_1"="APXWS_EXPR_1" value="prop1"
Thanks for any help,
JimThe bottom query is actually the third query, it encompasses the two that are unioned. It is generated by APEX to allow for the search facility - to achieve what you want ignore the larger query, and get your query working in something like SQL developer. Once it's working then put it into APEX, and the search wrapper will be generated.
select property,saddr1,upostdate,sotherdate1,journal_control-1000000000,account,sdesc,uref,
suserdefined1,trans_notes,samount,detail_notes
from journal_entries
where property = :YOUR_CRITERIA
union all
select property,saddr1,upostdate,sotherdate1,journal_control-700000000,account,sdesc,uref,
suserdefined1,trans_notes,stotalamount,detail_notes
from charge_entries
where property = :YOUR_CRITERIA;
Then you need to think about how you are using the report, if it is linked to from another report, then create a hidden variable and pass it from the parent.
If the report is standalone , then you could create an item , that can be edited and when submitted, re-executes the report based on the criteria entered.
Steve
Hot and bothered in sunny Dubai -
Performance issues with dynamic action (PL/SQL)
Hi!
I'm having perfomance issues with a dynamic action that is triggered on a button click.
I have 5 drop down lists to select columns which the users want to filter, 5 drop down lists to select an operation and 5 boxes to input values.
After that, there is a filter button that just submits the page based on the selected filters.
This part works fine, the data is filtered almost instantaneously.
After this, I have 3 column selectors and 3 boxes where users put values they wish to update the filtered rows to,
There is an update button that calls the dynamic action (procedure that is written below).
It should be straight out, the only performance issue could be the decode section, because I need to cover cases when user wants to set a value to null (@) and when he doesn't want update 3 columns, but less (he leaves '').
Hence P99_X_UC1 || ' = decode(' || P99_X_UV1 ||','''','|| P99_X_UC1 ||',''@'',null,'|| P99_X_UV1 ||')
However when I finally click the update button, my browser freezes and nothing happens on the table.
Can anyone help me solve this and improve the speed of the update?
Regards,
Ivan
P.S. The code for the procedure is below:
create or replace
PROCEDURE DWP.PROC_UPD
(P99_X_UC1 in VARCHAR2,
P99_X_UV1 in VARCHAR2,
P99_X_UC2 in VARCHAR2,
P99_X_UV2 in VARCHAR2,
P99_X_UC3 in VARCHAR2,
P99_X_UV3 in VARCHAR2,
P99_X_COL in VARCHAR2,
P99_X_O in VARCHAR2,
P99_X_V in VARCHAR2,
P99_X_COL2 in VARCHAR2,
P99_X_O2 in VARCHAR2,
P99_X_V2 in VARCHAR2,
P99_X_COL3 in VARCHAR2,
P99_X_O3 in VARCHAR2,
P99_X_V3 in VARCHAR2,
P99_X_COL4 in VARCHAR2,
P99_X_O4 in VARCHAR2,
P99_X_V4 in VARCHAR2,
P99_X_COL5 in VARCHAR2,
P99_X_O5 in VARCHAR2,
P99_X_V5 in VARCHAR2,
P99_X_CD in VARCHAR2,
P99_X_VD in VARCHAR2
) IS
l_sql_stmt varchar2(32600);
p_table_name varchar2(30) := 'DWP.IZV_SLOG_DET';
BEGIN
l_sql_stmt := 'update ' || p_table_name || ' set '
|| P99_X_UC1 || ' = decode(' || P99_X_UV1 ||','''','|| P99_X_UC1 ||',''@'',null,'|| P99_X_UV1 ||'),'
|| P99_X_UC2 || ' = decode(' || P99_X_UV2 ||','''','|| P99_X_UC2 ||',''@'',null,'|| P99_X_UV2 ||'),'
|| P99_X_UC3 || ' = decode(' || P99_X_UV3 ||','''','|| P99_X_UC3 ||',''@'',null,'|| P99_X_UV3 ||') where '||
P99_X_COL ||' '|| P99_X_O ||' ' || P99_X_V || ' and ' ||
P99_X_COL2 ||' '|| P99_X_O2 ||' ' || P99_X_V2 || ' and ' ||
P99_X_COL3 ||' '|| P99_X_O3 ||' ' || P99_X_V3 || ' and ' ||
P99_X_COL4 ||' '|| P99_X_O4 ||' ' || P99_X_V4 || ' and ' ||
P99_X_COL5 ||' '|| P99_X_O5 ||' ' || P99_X_V5 || ' and ' ||
P99_X_CD || ' = ' || P99_X_VD ;
--dbms_output.put_line(l_sql_stmt);
EXECUTE IMMEDIATE l_sql_stmt;
END;Hi Ivan,
I do not think that the decode is performance relevant. Maybe the update hangs because some other transaction has uncommitted changes to one of the affected rows or the where clause is not selective enough and needs to update a huge amount of records.
Besides that - and I might be wrong, because I only know some part of your app - the code here looks like you have a huge sql injection vulnerability here. Maybe you should consider re-writing your logic in static sql. If that is not possible, you should make sure that the user input only contains allowed values, e.g. by white-listing P99_X_On (i.e. make sure they only contain known values like '=', '<', ...), and by using dbms_assert.enquote_name/enquote_literal on the other P99_X_nnn parameters.
Regards,
Christian -
Memory leak issue with link server between SQL Server 2012 and Oracle
Hi,
We are trying to use the linked server feature with SQL Server 2012 to connect SQL server and Oracle database. We are concerned about the existing memory leak issue. For more context please refer to the link.
http://blogs.msdn.com/b/psssql/archive/2009/09/22/if-you-use-linked-server-queries-you-need-to-read-this.aspx
The above link talks about the issues with SQL Server versions 2005 and 2008, not sure if this is still the case in 2012. I could not find any article that talks about if this issue was fixed by Microsoft in later version.
We know that SQL Server process crashes because of the third-party linked server provider which is loaded inside SQL Server process. If the third-party linked server provider is enabled together with the
Allow inprocess option, the SQL Server process crashes when this third-party linked server experiences internal problems.
We wanted to know if this fixed in SQL Server 2012 ?So your question is more of a information type or are you really facing OOM issue.
There can be two things for OOM
1. There is bug in SQL Server which is causing the issue which might be fixed in 2012
2. The Linked server provider used to connect to Oracle is not upto date and some patch is missing or more recent version is to be used. Did you made sure that you are using latest version.
What is Oracle version you are trying to connect(9i,10g, R2...)
Please mark this reply as answer if it solved your issue or vote as helpful if it helped so that other forum members can benefit from it
My Technet Wiki Article
MVP -
Order by decode statement with Union all
Hi
I use Database Version: Oracle 9.2.0.1.0
OCI version 9.2
I try to use order by decode while i have a select base on union and I get en error:
ORA-01785: ORDER BY item must be the number of a SELECT-list expression
Here is my code:
select catalog_type, catalog_id, item_id, item_name
from items_catalog
union all
select catalog_type, catalog_id, organisation_unit_id, organisation_unit_name
from units_catalog
order by decode(catalog_type, 1, item_id, organisation_unit_id)
If I use the decode on a select statement without union, it works.
What I have to do in order to make it work on union all select?
TnxHi,
Here's a slightly different way:
COLUMN sort_key NOPRINT
VARIABLE catalog_type_wanted VARCHAR2 (5)
EXEC :catalog_type_wanted := '4';
SELECT catalog_id, item_id, item_name
, CASE
WHEN :catalog_type_wanted = '1' THEN '1'
ELSE '2'
END || item_id AS sort_key
FROM items_catalog
UNION ALL
SELECT catalog_id, organisation_unit_id, organisation_unit_name
, CASE
WHEN :catalog_type_wanted = '1' THEN '2'
ELSE '1'
END || organisation_unit_name AS sort_key
FROM units_catalog
ORDER BY sort_key
;This way guarantees that (for example) 'SHOP50' comes before 'SHOP58', whether or not they are in the first half of the output or the second half.
Notice that this uses the SQL*Plus COLUMN ... NOPRINT command to hide the sort_key column.
If you're not using SQL*Plus, then whatever front end you are using may have a similar feature.
If not, then you can do the UNION in a sub-query, as Daniel did, but do the ORDER BY in the main query (only).
Maybe you are looking for
-
i cannot sync,back up or add songs to my iPod Touch 5th generation 32 GB-whenever i make changes and click the apply/sync button it takes hours but still it doesn't sync or add music to my ipod............i thought there was a problem with itunes so
-
My query is related to frames. Can it be taken as a thumb rule that whenever we put a frame with its vertical and horizontal elasticity as fixed which is the default, it will take that much of fixed space in the report. Please help me in this as it i
-
Are there any magazines with articles and tips for AE - English language
Are there any magazines with articles and tips for AE - English language
-
Latest version of iTunes not recognizing my iPhone 4sprevious
I downloaded the latest version of iTunes on my laptop today and since then my iPhone 4s has not been recognized, but it was showing up just before I downloaded the new iTunes. What can I do to fix this? Or is there a way to download they previous iT
-
Trying to disconnect from a server
I used my personal laptop at my old job and IT connected it to a server. When I left, I forgot to have them disconnect it and now I get very annoying error messages, the biggest during my login: "There was a problem connecting to the server. The serv