Sql query to achieve this
Hi all,
Query to achieve the below output:
source table :
empno,_deptno_
110,10
110,20
110,30
120,10
130,20
130,30
130,30
110,40
I need the output in below format:
empno,deptno
110,10$20$30$40
120,10
130,20$30$30
or:
SQL> -- generating sample data:
SQL> with t as (
2 select 110 empno,10 deptno from dual union
3 select 110,20 from dual union
4 select 110,30 from dual union
5 select 120,10 from dual union
6 select 130,20 from dual union
7 select 130,30 from dual union
8 select 130,30 from dual union
9 select 110,40 from dual
10 )
11 --
12 -- actual query:
13 --
14 select empno
15 , replace(sys_connect_by_path(deptno, ','),',') deptno
16 from ( select empno
17 , deptno
18 , row_number() over (partition by empno order by deptno) rn
19 from t
20 )
21 where connect_by_isleaf=1
22 start with rn=1
23 connect by empno=prior empno
24 and rn = prior rn+1;
EMPNO DEPTNO
110 10203040
120 10
130 2030
3 rows selected.
Similar Messages
-
SQL Query Help - Is this possible or impossible????
Hi guys,
I need help with an SQL query that I'm trying to develop. It's very easy to explain but when trying to implement it, I'm struggling to achieve the results that I want.....
For example,
I have 2 tables
The first table is:
1) COMPANY create table company (manufacturer varchar2(25),
date_established date,
location varchar2(25) );My sample test date is:
insert into company values ('Ford', 1902, 'USA');
insert into company values ('BMW', 1910, 'Germany');
insert into company values ('Tata', 1922, 'India');The second table is:
2) MODELS create table models (manufacturer varchar(25),
model varchar2(25),
price number(10),
year date,
current_production_status varchar2(1) ) ;My sample test data is:
insert into models values ('Ford', 'Mondeo', 10000, 2010, 0);
insert into models values ('Ford', 'Galaxy', 12000, 2008, 0);
insert into models values ('Ford', 'Escort', 10000, 1992, 1);
insert into models values ('BMW', '318', 17500, 2010, 0);
insert into models values ('BMW', '535d', 32000, 2006, 0);
insert into models values ('BMW', 'Z4', 10000, 1992, 0);
insert into models values ('Tata', 'Safari', 4000, 1999, 0);
insert into models values ('Tata', 'Sumo', 5500, 1996, 1);
insert into models values ('Tata', 'Maruti', 3500, 1998, 0);And this is my query:
SELECT
com.manufacturer,
com.date_established,
com.location,
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.model),
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.price),
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.year),
mod.current_production_status
FROM
company com,
models mod
WHERE
mod.manufacturer = com.manufacturer
and com.manufacturer IN ('Ford', 'BMW', 'Tata')
and mod.current_production_status IN (1,0)
ORDER BY
mod.current_production_status DESCWhat I want the query to output is this:
com.manufacturer com.date_established com.location mod.model mod.price mod.year mod.current_production_status
Ford 1902 USA Escort 10000 1992 1
BMW 1910 Germany - - - 0
Tata 1922 India Sumo 5500 1998 1If current_production_status is 1 it means this particular model has been discontinued
If current_production_status is 0 it means the manufacturer does not have any discontinued models and all are in procuction.
The rule is only one record per manufacturer is allowed to have a current_production_status of 1 (so only one model from the selection the manufactuer offers is allowed to be discontinued).
So the query should output the one row where current_production_status is 1 for each manufacturer.
If for a given manufacturer there are no discontinued models and all have a current_production_status of 0 then ouput a SINGLE row that only includes the data from the COMPANY table (as above). The rest of the columns from the MODELS table should be populated with a '-' (hyphen).
My query as it is above will output all the records where current status is 1 or 0 like this
com.manufacturer com.date_established com.location mod.model mod.price mod.year mod.current_production_status
Ford 1902 USA Escort 10000 1992 1
Tata 1922 India Sumo 5500 1998 1
Ford 1902 USA - - - 0
Ford 1902 USA - - - 0
BMW 1910 Germany - - - 0
BMW 1910 Germany - - - 0
BMW 1910 Germany - - - 0
Tata 1922 India - - - 0
Tata 1922 India - - - 0However this is not what I want.
Any ideas how I can achieve the result I need?
Thanks!
P.S. Database version is '10.2.0.1.0'Hi Vishnu,
Karthiks query helped...
But this is the problem I am facing...
SELECT
com.manufacturer,
com.date_established,
com.location,
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.model),
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.price),
DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.year),
mod.current_production_status
FROM
company com,
models mod
WHERE
mod.manufacturer = com.manufacturer
and com.manufacturer = 'Ford'
and mod.current_production_status IN (1,0)
ORDER BY
mod.current_production_status DESCThe value of:
and com.manufacturer = 'Ford'will be dependent on front end user input....
When I run the query above I get all the rows where current_production_status is either 1 or 0.
I only require the rows where current_production_status is 1.
So if I amend it to look like this:
and mod.current_production_status = 1This works....
BUT if a user now passes in more than one manufacturer EG:
and com.manufacturer IN ('Ford', 'BMW')The query will only return the one row for Ford where current_production_status is 1. However because BMW has no models where current_production_status is 1 (all 3 are 0), I still want this to be output - as one row....
So like this:
com.manufacturer com.date_established com.location mod.model mod.price mod.year mod.current_production_status
Ford 1902 USA Escort 10000 1992 1
BMW 1910 Germany - - - 0So (hopefully you understand), I want both cases to be catered for.....whether a user enters one manufacturer or more than one...
Thanks you so much!
This is really driving me insane :-( -
Sql query to generate this output
Hi,
I have a table as follows;
SET_MASTER
ID set_id attribute_id attribute_value
1 1 2 10
2 1 3 20
3 1 4 50
4 1 5 60
5 2 2 10
6 2 3 30
7 2 4 40
8 2 5 50
I want to generate an output as folllows;
Attr_id Set1_attr_value Set2_attr_value min_attr_value max_attr_value
2 10 10 10 10
3 20 30 20 30
4 50 40 40 50
5 60 50 50 60
Please provide the query to generate this output.
Thanks.SQL> create table set_master (id,set_id,attribute_id,attribute_value)
2 as
3 select 1, 1, 2, 10 from dual union all
4 select 2, 1, 3, 20 from dual union all
5 select 3, 1, 4, 50 from dual union all
6 select 4, 1, 5, 60 from dual union all
7 select 5, 2, 2, 10 from dual union all
8 select 6, 2, 3, 30 from dual union all
9 select 7, 2, 4, 40 from dual union all
10 select 8, 2, 5, 50 from dual
11 /
Tabel is aangemaakt.
SQL> select attribute_id attr_id
2 , max(decode(set_id,1,attribute_value)) set1_attr_value
3 , max(decode(set_id,2,attribute_value)) set2_attr_value
4 , least(max(decode(set_id,1,attribute_value)),max(decode(set_id,2,attribute_value))) min_attr_value
5 , greatest(max(decode(set_id,1,attribute_value)),max(decode(set_id,2,attribute_value))) max_attr_value
6 from set_master
7 group by attribute_id
8 order by attribute_id
9 /
ATTR_ID SET1_ATTR_VALUE SET2_ATTR_VALUE MIN_ATTR_VALUE MAX_ATTR_VALUE
2 10 10 10 10
3 20 30 20 30
4 50 40 40 50
5 60 50 50 60
4 rijen zijn geselecteerd.Regards,
Rob. -
Sql query to display this result
AccountNo
Name
Total Credit
Total Debit
Balance
100010
NEEM
5000
4000
1000
100011
Kamran
50000
49000
1000
100012
Asim
3000
2000
1000Please follow basic Netiquette and post the DDL we need to answer this. Do you know how to follow industry and ANSI/ISO standards. You should follow ISO-11179 rules for naming data elements. You should follow ISO-8601 rules for displaying temporal data.
Avoid dialect in favor of ANSI/ISO Standard SQL. We need to know the data types, keys and constraints on the table.
Why did you think anyone could do anything with what you posted???
--CELKO-- Books in Celko Series for Morgan-Kaufmann Publishing: Analytics and OLAP in SQL / Data and Databases: Concepts in Practice Data / Measurements and Standards in SQL SQL for Smarties / SQL Programming Style / SQL Puzzles and Answers / Thinking
in Sets / Trees and Hierarchies in SQL -
How to create a Matrix table using this data in SQL Query Analyzer
Hello all,
I have a problem while I am trying to represent my Sql Table namely table1 in Matrix form
my table Format is
city1 city2 Distance--------------------------------------------------------
Mumbai Delhi 100
Delhi Banaras 50
Mumbai Rajasthan 70
Banaras haryana 40
Mumbai Mumbai 0
784 entries
there are 784 cities each having link to other
Now i want my output as
Mumbai Delhi Banaras haryana
Mumbai 0 100 -- --
Delhi 100 0 50 --
Banaras
haryana
respective distance from one city to other should be shown
final Matrix would be 784*784
I am using SQL Query Analyser for this
Please help me in this regardI'm pretty much certain that you don't want to do this in pure SQL. So that means that you want to do it with a reporting tool. I'm not familiar with SQL Query Analyzer, but if it is in fact a reporting tool you'll want to consult its documentation looking for the terms "pivot" or perhaps "cross tab."
-
Query or functions to achieve this logic ?? Please help...
Hi all,
I've a table "permission" with the following data
Name Permission
A Read
B Read
A Write
C Execute
B Execute
There can be only three permissions for a user - Read , write and execute
Following is the required o/p : ( if the user has a permission (r/w/x) , the corresponding value will be 1 , otherwise it is 0 )
Name Read Write Execute
A 1 1 0
B 1 0 1
C 0 0 1
Are there any standard functions in Oracle 10 to achieve this o/p ? Or Please provide a query to achieve this ...
Thanks in Advance,
Praneeth.
Edited by: pbo on Jan 3, 2013 8:58 PMOne way of doing it:
with data as
select 'A' name, 'Read' perm from dual union all
select 'B' name, 'Read' perm from dual union all
select 'A' name, 'Write' perm from dual union all
select 'C' name, 'Execute' perm from dual union all
select 'B' name, 'Execute' perm from dual
--End of sample data
select name,
max(decode(perm, 'Read', 1, 0)) read,
max(decode(perm, 'Write', 1, 0)) write,
max(decode(perm, 'Execute', 1, 0)) read
from data --> You can use your table name instead of sample table
group by name;
NAME READ WRITE READ
A 1 1 0
B 1 0 1
C 0 0 1 -
SQL query using Group by and Aggregate function
Hi All,
I need your help in writing an SQL query to achieve the following.
Scenario:
I have table with 3 Columns. There are 3 possible values for col3 - Success, Failure & Error.
Now I need a query which can give me the summary counts for distinct values of col3 for each GROUP BY of col1 and col2 values. When there are no values for col3 then it should return ZERO count.
Example Data:
Col1 Col2 Col3
abc 01 success
abc 02 success
abc 01 success
abc 01 Failure
abc 01 Error
abc 02 Failure
abc 03 Error
xyz 07 Failure
Required Output:
c1 c2 s_cnt F_cnt E_cnt (Heading)
abc 01 2 1 1
abc 02 1 1 0
abc 03 0 0 1
xyz 07 0 1 0
s_cnt = Success count; F_cnt = Failure count; E_cnt = Error count
Please note that the output should have 5 columns with col1, col2, group by (col1,col2)count(success), group by (col1,col2)count(failure), group by (col1,col2)count(error)
and where ever there are NO ROWS then it should return ZERO.
Thanks in advance.
Regards,
ShivaHi,
user13015050 wrote:
Thanks TTT. Unfortunately I cannot use this solution because I have huge data for this.T's solution is basically the same as mine. The first 23 lines just simulates your table. Since you actually have a table, you would start with T's line 24:
SELECT col1 c1, col2 c2, SUM(decode(col3, 'success', 1, 0)) s_cnt, ...
user13015050 wrote:Thanks a lot Frank. It helped me out. I just did some changes to this as below and have no issues.
SELECT col1
, col2
, COUNT ( CASE
WHEN col3 = 'SUCCESS'
THEN 1
END
) AS s_cnt
, COUNT ( CASE
WHEN col3 = 'FAILED'
THEN 1
END
) AS f_cnt
, COUNT ( CASE
WHEN col3 = 'ERROR'
THEN 1
END
) AS e_cnt
FROM t1
WHERE c2 in ('PURCHASE','REFUND')
and c4 between to_date('20091031000000','YYYYMMDDHH24MISS') AND to_date('20100131235959','YYYYMMDDHH24MISS')
GROUP BY c1, c2
ORDER BY c1, c2;
Please let me know if you see any issues in this query.It's very hard to read.
This site normally compresses spaces. Whenever you post formatted text (such as queries or results) on this site, type these 6 characters:
\(small letters only, inside curly brackets) before and after each section of formatted text, to preserve spacing.
Also, post exactly what you're using. The code above is SELECTing col1 and col2, but there's no mention of either in the GROUP BY clause, so I don't believe it's really what you're using.
Other than that, I don't see anything wrong or suspicious in the query. -
Hi All,
I am using Oracle Database Version 11.2.
I have a formula (A-B)/[(A-B)/10]. The tables that are holding the rows for this calculations are given below:
ROWS_TAB
====== ===================
Row Amount
====== ===================
A 5000
B -5000
FORMULA_TAB
======== =========== ======== =============
| ROW# | Operator | ROW | CONSTANT |
======== =========== ======== =============
| 10 | E | A | |
| 20 | - | B | |
| 30 | E | A | |
| 40 | - | B | |
| 50 | / | | 10 |
| 60 | / | | |
======== =========== ======== =============
The operator E starts a new calculation. The above formula has two sub-expressions thereby the table has two rows with E. Minus denoted by -, Plus denoted by +, Multiply denoted by *, and Division denoted by /.
I want to write single SQL query to perform this calculation. Is it achievable in SQL?
The scripts used to generate the tables are as below:
create table ROWS_TAB
(row_name VARCHAR2(1),
amount NUMBER);
create table FORMULA_TAB
(row# NUMBER,
operator VARCHAR2(1),
row_name VARCHAR2(1),
constant NUMBER);
INSERT INTO ROWS_TAB VALUES('A', 5000);
INSERT INTO ROWS_TAB VALUES('B', -5000);
INSERT INTO FORMULA_TAB VALUES(10, 'E','A',null);
INSERT INTO FORMULA_TAB VALUES(20, '-','B',null);
INSERT INTO FORMULA_TAB VALUES(30, 'E','A',null);
INSERT INTO FORMULA_TAB VALUES(40, '-','B',null);
INSERT INTO FORMULA_TAB VALUES(50, '/','',10);
INSERT INTO FORMULA_TAB VALUES(60, '/','','');
Can anyone help in writing SQL query....
Thanks in advance
Best Regards
BilalAs Frank said, it would be much easier to simply input the formula. Then, assuming you have OLAP option:
variable formula varchar2(30)
exec :formula := '(A-B)/((A-B)/10)';
with t as (
select *
from rows_tab
model
dimension by(row_number() over(order by row_name) r)
measures(
row_name,
amount,
count(*) over() cnt,
cast(:formula as varchar2(4000)) formula
rules(
formula[any] order by r = replace(nvl(formula[cv() - 1],formula[cv()]),row_name[cv()],amount[cv()])
select :formula || ' = ' || dbms_aw.eval_number(formula) result
from t
where r = cnt
RESULT
(A-B)/((A-B)/10) = 10
SQL>
And if you do not have OLAP, you could use xquery:
with t as (
select *
from rows_tab
model
dimension by(row_number() over(order by row_name) r)
measures(
row_name,
amount,
count(*) over() cnt,
cast(:formula as varchar2(4000)) formula
rules(
formula[any] order by r = replace(nvl(formula[cv() - 1],formula[cv()]),row_name[cv()],amount[cv()])
select :formula || ' = ' || xmlquery(replace(formula,'/',' div ') returning content) result
from t
where r = cnt
RESULT
(A-B)/((A-B)/10) = 10
SQL>
SY. -
Hi ,
I have created a SQL query using SQVI.
But I need to write some additional conditions in the logic which are not possible through SQVI / SQ01.
Therefore I am wondering ......
if we have some functionality where we can add my own logic/conditions in the SQL program generated by Std SAP.
Also I would appreciate if you could let me know the difference between SQVI and SQ01 and how to conver a SQL query to transaction code.
Regards
ShreyThx for your reply .... but I am some different query.
I have created a SQL query using SQVI.
The purpose of this query was to extract data from two tables.The query is working fine , till the time linked data is available is both tables
I am giving below example to explain my problem. I have two tables A and B with below fields
Table A
S.No
Student Name
Class
Table B
S.No
Teacher name
Education
both the tables are are linked thru common S.No field in my query and I am extracting data fields ,
S.No | Student Name| Class | Teacher Name
My Query is working fine till the time data record of respective S.No is available in both the tables. But there are cases when data is only available in TABLE A, such cases are not being extract through my SQL query.
Therefore i wanted to change the PROGRAM of my SQL query so that system should extract the data even when data is available in ONE TABLE only.
Therefore , is it possible to change the program generated by SAP through my SQL Query (SQVI) or this can only be achieved through a T.Code ?
If It is possible thru SQVI , then how should be proceed ?
Sorry for asking such a foolish query.
Regards
Shrey -
How to modify a SQL query?
Hi all,
I am using Crystal Reports version 10. I have a number of reports that have been written by a software vendor wherby the name of the database they were connected to when the report was written is coded into the FROM command of the reports SQL query, eg "GCUK_2" in the of the SQL snippet below.
SELECT "Clients"."NAME", "Quotes"."QUOTE_ID", "Quote_Items"."UPRICE", "Quote_Items"."QTY", "Quote_Items"."UOM", "Quote_Items"."QUSAGE_ID", "Report_Control"."QUSAGEID", "Quote_Items"."STANDARD", "Quote_Items"."SECT_FLAG", "Quote_Items"."DISPORDER", "Quotes"."DESCRIPT", "Report_Control"."SECT_NAME", "Quote_Items"."CNT", "Category_and_Type"."TYPEDESC", "Quote_Items"."DESCRIPT", "Report_Control"."DISP_SORT"
FROM ((("GCUK_2"."schedwin"."QTE_CTRL" "Report_Control" INNER JOIN "GCUK_2"."schedwin"."QUSAGE" "Quote_Items" ON "Report_Control"."QUSAGEID"="Quote_Items"."QUSAGE_ID") LEFT OUTER JOIN "GCUK_2"."schedwin"."QUOTES" "Quotes" ON
I have tried setting the Datasource Location, but it doesn't change the query at all. I have read on another forum that you can generate another SQL query using the Database Expert, Current Connections, then right click the Add Command for the database you want to create a SQL command. Is this the only way to update the database names in the query?
Thanks,
Scott.Hi Sourashree,
Thanks for that. All the reports were created by the vendor using tables as opposed to the command object. I would have thought that changing the datasource would automatically cause Crystal to rewrite the SQL query syntax, but this doesn't appear to be the case.
Yes, I've noticed that modifying the record selection will change the sql query. The only way I can see to change the database name in the query is to change to the desired databsource and then remove and re-insert the tables, which will then update the query with the correct name. However, this seems to be a convoluted way of changing the db name in the query. -
I'm attempting to dynamically generate a rather large SQL query via the "PL/SQL function body returning SQL query" report region option. The SQL query generated will possibly be over 32K. When I execute my page, I sometimes receive the "ORA-06502: PL/SQL: numeric or value error" which points to a larger than 32K query that was generated. I've seen other posts in the forum related to this dynamic SQL size limitation issue, but they are older (pre-2010) and point to the 32K limit of the DNS (EXECUTE IMMEDIATE) and DBMS_SQL. I found this post (dynamic sql enhancements in 11g) which discusses 11g no longer having the 32K size limitation for generating dynamic SQL. Our environment is on 11gR2 and using ApEx 4.2.1. I do not know which dynamic SQL method -- DNS or DBMS_SQL -- ApEx 4.2.1 is using. Can someone clarify for me which dynamic SQL method ApEx uses to implement the "PL/SQL function body returning SQL query" option?
As a test, I created a page on apex.oracle.com with a report region with the following source:
declare
l_stub varchar2(25) := 'select * from sys.dual ';
l_sql clob := l_stub || 'union all ';
br number(3) := 33;
begin
while length ( l_sql ) < 34000 loop
l_sql := l_sql || l_stub || 'union all ';
end loop;
l_sql := l_sql || l_stub;
for i in 1 .. ceil ( length ( l_sql ) / br ) loop
dbms_output.put_line ( dbms_lob.substr ( l_sql, br, ( ( i - 1 ) * br ) + 1 ) );
end loop;
return l_sql;
end;
The dbms_output section is there to be able to run this code in SQL*Plus and confirm the size of the SQL is indeed larger than 32K. When running this in SQL*Plus, the procedure is successful and produces a proper SQL statement which can be executed. When I put this into the report region on apex.oracle.com, I get the ORA-06502 error.
I can certainly implement a work-around for my issue by creating a 'Before Header' process on the page which populates an ApEx collection with the data I am returning and then the report can simply select from the collection, but according to documentation, the above 32K limitation should be resolved in 11g. Thoughts?
Shane.What setting do you use in your report properties - especially in Type and in Region Source?
If you have Type="SQL Query", then you should have a SELECT statement in the Region Source. Something like: SELECT .... FROM ... WHERE
According to the ERR-1101 error message, you have probably set Type to "SQL Query (PL/SQL function body returning SQL query)". In this situation APEX expects you to write a body of a PL/SQL function, that will generate the text of a SQL query that APEX should run. So it can be something like:
declare
mycond varchar2(4000);
begin
if :P1_REPORT_SEARCH is not null THEN
mycond:='WHERE LAST_NAME like :P1_REPORT_SEARCH ||''%''';
end if;
return 'select EMPLOYEE_ID, FIRST_NAME, LAST_NAME from EMPLOYEES ' ||mycond;
end;
And for escaping - are you interested in escaping the LIKE wildcards, or the quotes?
For escaping the wildcards in LIKE function so that when the user enters % you will find a record with % and not all functions, look into the SQL Reference:
http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/conditions007.htm
(You would than need to change the code of your function accordingly).
If you are interested in escaping the quotes, try to avoid concatenating the values entered by the user into the SQL. If you can, use bind variables instead - as I have in my example above. If you start concatenating the values into the text of SQL, you are open to SQLInjection - user can enter anything, even things that will break your SQL. If you really need to allow users to choose the operator, I would probably give them a separate combo for operators and a textfield for values, than you could check if the operator is one of the allowed ones and create the condition accordingly - and than still use bind variable for inserting the filtering value into the query. -
SQL query was failed in my report after migrating to Oracle 10gR2
We have a aplication running under Oracle 9.2.0.4 DB. we migrated our DB to Oracle 10gR2. While running the report, we got an error:
ORA-00904: "A3"."FACILITY_SYSTEM_ID": invalid identifier
ORA-06512: at "CEAS_MK_RPT.GET_LIST", line 12
The SQL query which causes this error is:
INSERT INTO gtt_facility_seq_generator
(date_range)
SELECT get_list
(CURSOR (SELECT auf.facility_system_id
FROM authorized_facility auf
WHERE auf.facility_system_id = afs.facility_system_id
AND auf.credit_application_system_id = :p_cred_appln_id
FROM authorized_facility afs,
(SELECT af.facility_system_id facility_system_id
FROM facility_obligor fo, authorized_facility af, party p
WHERE fo.facility_system_id = af.facility_system_id
AND fo.party_system_id = p.party_system_id
AND NOT EXISTS (
SELECT NULL
FROM facility_third_party_subst iftps
WHERE iftps.facility_system_id =
fo.facility_system_id)
) tab1
WHERE afs.credit_application_system_id = :p_cred_appln_id
AND tab1.facility_system_id = afs.facility_system_id
ORDER BY afs.creation_date;
The content of function get_list() is:
CREATE OR REPLACE FUNCTION CEAS_MK_RPT.Get_List
p_cursor IN sys_refcursor
RETURN VARCHAR2
IS
l_sep VARCHAR2(4);
l_text VARCHAR2(30000);
l_text_return VARCHAR2(30000);
BEGIN
LOOP
FETCH p_cursor INTO l_text;
EXIT WHEN p_cursor%NOTFOUND;
l_text_return := l_text_return || l_sep || l_text;
l_sep := CHR(10);
END LOOP;
CLOSE p_cursor;
RETURN l_text_return;
dbms_output.put_line ('a');
END Get_List;
The same report was executed perfectly in Oracle 9i. Kindly help us to short out this issue. Thanks in advance.
Regards,
Sengol SHi Nirav,
Many thanks for your response. I verified the same, but the same query was executed successfully after removing the INSERT INTO part(executed the SELECT part only). What might be the cause for this error?
For your kind information :
I have 2 schema in my DB( ceas_mk_app and ceas_mk_rpt ).
All the source tables are present in ceas_mk_app schema - These tables are used by ceas_mk_rpt schema(using synonym) to generate the report.
I'm executing the above said query from ceas_mk_rpt to insert the necessary data in to report temp. table.
Thanks,
Sengol S
Edited by: seng1256 on Dec 22, 2008 12:31 PM -
Set the column length in an sql query
Hi,
Is there a way to set the column length in a query without using sqlplus commands like row size and format column.
I'd like to do it just from the sql query itself.
select 'this is a test' from dual; Can I define the width of this column in the select statement
Cheers.Use RPAD,
SQL> WITH T
2 AS (SELECT 'this is test' str FROM DUAL
3 UNION ALL
4 SELECT 'this is a long test' FROM DUAL
5 UNION ALL
6 SELECT 'this is a long long long long test' FROM DUAL)
7 SELECT RPAD ( str, 20) str,LENGTH( RPAD ( str, 20)) len
8 FROM T;
STR LEN
this is test 20
this is a long test 20
this is a long long 20
SQL> G. -
Is it possible in PLD to add sql query ?
Hi
In Order report in PLD , i need to add the total amount of down payment . it doesn't exists in Order , so i need to do a sql query to display this amount .
is it possible to add sql query in pld formula ?
thanks ,
regards
laurentHi,
You cannot add sql query in PLD.If you need SQL query use Crystal report or on the document add UDF and try by adding FMS and then selecting UDF in pld
Thanks,
Neetu -
SQL Query (challenge)
Hello,
I have 2 tables of events E1 and E2
E1: (Time, Event), E2: (Time, Event)
Where the columns Time in both tables are ordered.
Ex.
E1: ((1, a) (2, b) (4, d) (6, c))
E2: ((2, x) (3, y) (6, z))
To find the events of both tables at the same time it is obvious to do & join between E1 and E2
Q1 -> select e1.Time, e1.Event, e2.Event from E1 e1, E2 e2 where e1.Time=e2.Time;
The result of the query is:
((2, b, x) (6, c, z))
Given that there is no indexes for this tables, an efficient execution plan can be a hash join (under conditions mentioned in Oracle Database Performance Tuning Guide Ch 14).
Now, the hash join suffers from locality problem if the hash table is large and does not fit in memory; it may happen that one block of data is read in memory and swaped out frequently.
Given that the Time columns are sorted is ascending order, I find the following algorithm, known idea in the literature, apropriate to this problem; The algorithm is in pseudocode close to pl/sql, for simplicity (I home the still is clear):
-- start algorithm
open cursors for e1 and e2
loop
if e1.Time = e2.Time then
pipe row (e1.Time, e1.Event, e2.Event);
fetch next e1 record
exit when notfound
fetch next e2 record
exit when notfound
else
if e1.Time < e2.Time then
fetch next e1 record
exit when notfound
else
fetch next e2 record
exit when notfound
end if;
end if;
end loop
-- end algorithm
As you can see the algorithm does not suffer from locality issue since it iterates sequentially over the arrays.
Now the problem: The algorithm shown below hints the use of pipelined function to implement it in pl/sql, but it is slow compared to hash join in the implicit cursor of the query shown above (Q1).
Is there an implicit SQL query to implement this algorithm? The objective is to beat the hash join of the query (Q1), so queries that use sorting are not accepted.
A difficulty I foound is that the explicit cursor are much slower that implict ones (SQL queries)
Example: for a large table (2.5 million records)
create table mytable (x number);
declare
begin
open c for 'select 1 from mytable';
fetch c bulk collect into l_data;
close c;
dbms_output.put_line('couont = '||l_data.count);
end;
is 5 times slower then
select count(*) from mytable;
I do not understand why it should be the case, I read that this may be explained because pl/sql is interpreted, but I think this does not explain the whole issue. May be because the fetch copies data from one space to your space and this takes a long time.Hi
A correction in the algorithm:
-- start algorithm
open cursors for e1 and e2
fetch next e1 record
fetch next e2 record
loop
exit when e1%notfound
exit when e2%notfound
if e1.Time = e2.Time then
pipe row (e1.Time, e1.Event, e2.Event);
fetch next e1 record
fetch next e2 record
else
if e1.Time < e2.Time then
fetch next e1 record
else
fetch next e2 record
end if;
end if;
end loop
-- end algorithm
Best regards
Taoufik
Maybe you are looking for
-
I don't know how to fix this. I've contacted iTunes support over the phone and it still does it, but now not AS frequently, but let me explain..... Okay, well. I have had iTunes since the iTunes 9. Personally, iTunes bugs the living crap out of me. B
-
Cannot delete text messages on my New xperia Z3+
Please help
-
how do i download adobe flash player on my hp pavilion with windows 8 operating system
-
'kay dudes. complcl does the trick thanks j-p -----Message d'origine----- De: Jean-Paul Gabrielli [mailto:Jean-Paul.Gabriellisema.fr] Date: mercredi 4 octobre 2000 11:39 À: zeForte-users Objet: (forte-users) .fnd & .fso files ?? What are them, how to
-
Rename an Ipod - 2 Ipods 1 computer
Can you rename an I pod. I have a first gen which my other half will now be having and I have just bought the 2nd gen. however I want to change the name. Is there anything I should be wary of if I sync 2 ipods and 1 pc Thanxs in advance