Dynamic query order by
Is there a way to dynamically order by a variable in apex?
I.e.
select *
from employees e
order by :P1_DEPT
I have not been able to get this to work does anyone have a solution for this???
Hi Dan,
Yes ofcourse you can go by the default behaviour of APEX to sort by Column names ;-) I also prefer to do it that way...
But I just made that example to show cos_lwcit_jk how you could work with a "variable" in an order by as that was his question.
I presumed cos_lwcit_jk knew about that, but maybe I should have put it before, so good addition.
Thanks,
Dimitri
Similar Messages
-
Dynamic orderby clause for multiple columns with out Dynamic query
Hi,
I've a query like
"select * from tablename order by column1,column2,column3,column4,column5,column6"
in the above query the order by column will be dynamically changed. The query is placed in a stored procedures and the order by column will come by parameter.
For ex: @orderbycol = column2,column1,column3,column4,column5,column6
or
@orderbycol = column3,column2,column1,column4,column5,coumn6
How can we manage the order by clause as dynamically without go to dynamic query.ORDER BY CASE @sortcol1
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END,
CASE @sortcol2
WHEN 'col1' THEN col1
WHEN 'col2' THEN col2
END,
Note: these CASE expressions assumes that all columns have the same data type.
You could consider sorting in the presentation layer instead.
Erland Sommarskog, SQL Server MVP, [email protected] -
Dynamic Query to display a page of records at a time
I need some help creating procedure with a dynamic query that will query a table and pass out a certain number of records (like records 101 - 200 of 20,000). This procedure will receive the column names, table name, where clause, page number and number of records per page. It will then pass back the requested records to be displayed on a PHP page.
Pseudo Code:
Select Dynamic_Columns, ROWNUM
Into Dynamic_Pl_Sql_Table
From Dynamic_Table
Where Dynamic_Where_Clause
Total_Records_Out := Dynamic_PL_Sql_Table.Count
Modulus := Mod(Total_Records_Out, Total_Records_Per_Page_In)
Total_Pages_Out := (Total_Records_Out - Modulus) / Total_Records_Per_Page_In
If Modulus > 0 Then
Total_Pages_Out + 1
End If
Row_Start = Page_Number_In * Total_Records_Per_Page_In
Row_End = Row_Start + Total_Records_Per_Page_In
Results_Out = Dynamic_Pl_Sql_Table(Row_Start ... Row_End)
Any help with this will be appreciated!Maybe this will help you
1) If the Serial is 0 then page break
2) total_rows gives you total number of rows selected.
3) you can apply where clause to this and it will give you appropriate records.
select empno, ename, sal,
mod(row_number() over (order by null),5) serial,
count(*) over () tot_rows from emp ed
EMPNO ENAME SAL SERIAL TOT_ROWS
7369 SMITH 800 1 14
7499 ALLEN 1600 2 14
7521 WARD 1250 3 14
7566 JONES 2975 4 14
7654 MARTIN 1250 0 14
7698 BLAKE 2850 1 14
7934 MILLER 1300 2 14
7788 SCOTT 3000 3 14
7839 KING 5000 4 14
7844 TURNER 1500 0 14
7876 ADAMS 1100 1 14
7900 JAMES 950 2 14
7902 FORD 3000 3 14
7782 CLARK 2450 4 14
14 rows selected.SS -
Dynamic Query
When I run the following dynamic query in the stored procedure and try to build the report then I get the following error Rep:1401 Fatal PL/SQL error occured, Ora-00936 Missing expression. When I am generating the report standalone using the following query , everything is working fine but in Stored procedure , it's giving me the above error, pls help.
create or replace package REP_DELIVERY_LOC_STATISTICS is
TYPE REP_DELIVERY_LOC_STAT_rec IS RECORD(
p_coordinating_facility_id sis_education_pgm_session.coordinating_facility_id%TYPE,
p_PSE_MUNICIPALITY_ID pse_education_pgm_session.PSE_MUNICIPALITY_ID%TYPE,
p_pse_education_pgm_session_id sis_education_pgm_session.pse_education_pgm_session_id%TYPE,
p_course_session_id course_session.course_session_id%TYPE);
TYPE REP_DELIVERY_LOC_STAT_cur IS REF CURSOR RETURN REP_DELIVERY_LOC_STAT_rec;
Type REP_DELIVERY_LOC_STAT_cur_Dyn is REF CURSOR;
FUNCTION REP_DELIVERY_LOC_STATISTICS(p_college_id IN pse_education_pgm_session.delivery_institution_id%TYPE,
p_start_date IN pse_education_pgm_session.session_strt_dte%TYPE,
p_end_date IN pse_education_pgm_session.session_strt_dte%TYPE,
p_coord_facility_join IN varchar2) return REP_DELIVERY_LOC_STAT_cur_Dyn;
end REP_DELIVERY_LOC_STATISTICS;
create or replace package body REP_DELIVERY_LOC_STATISTICS is
FUNCTION REP_DELIVERY_LOC_STATISTICS(p_college_id IN pse_education_pgm_session.delivery_institution_id%TYPE,
p_start_date IN pse_education_pgm_session.session_strt_dte%TYPE,
p_end_date IN pse_education_pgm_session.session_strt_dte%TYPE,
p_coord_facility_join varchar2) return REP_DELIVERY_LOC_STAT_cur_Dyn IS
REP_DELIV_LOC_STAT_CUR_Dyn_Q REP_DELIVERY_LOC_STAT_cur_Dyn;
BEGIN
OPEN REP_DELIV_LOC_STAT_CUR_Dyn_Q FOR
'SELECT distinct
seps.coordinating_facility_id,
peps.PSE_MUNICIPALITY_ID,
seps.pse_education_pgm_session_id,
cs.course_session_id
FROM pse_education_pgm_session peps,
sis_education_pgm_session seps,
course_session cs,
facility fac,
desc_sis_reporting_area depa,
desc_sis_reporting_type dept,
pse_education_program pep
WHERE peps.delivery_institution_id (+) = ' || p_college_id
|| ' and peps.session_strt_dte between ' ||p_start_date||' and ' || p_end_date
|| ' and seps.coordinating_facility_id = fac.facility_id (+)
and seps.pse_education_pgm_session_id (+) = peps.pse_education_pgm_session_id
and seps.pse_education_pgm_session_id = cs.pse_education_pgm_session_id (+)
and pep.pse_education_program_id = peps.pse_education_program_id
and dept.desc_sis_reporting_area_id = depa.desc_sis_reporting_area_id
and pep.desc_sis_reporting_type_id = dept.desc_sis_reporting_type_id
and dept.desc_sis_reporting_area_id = depa.desc_sis_reporting_area_id
and fac.desc_facility_id in (2,3)' || NVL (p_coord_facility_join, '1=1');
return REP_DELIV_LOC_STAT_CUR_Dyn_Q;
END;
end REP_DELIVERY_LOC_STATISTICS;I would sugest to grab a book like
Inside Microsoft SQL Server 2008 T-SQL Querying (chapter 12 - Graphs, Trees, Hierarchies and Recursive Queries) or
Joe Celko's Trees and Hierarchies in SQL for Smarties to get familiar with how model hierarchies using SQL.
What is the meaning of the asterisks in the path?
Here is a dirty example using the Adjacency List model.
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.T1 (
id int NOT NULL UNIQUE CLUSTERED,
name varchar(50),
rootid int NULL
INSERT INTO dbo.T1 (id,name,rootid)
SELECT 1, 'animals', NULL
UNION ALL
SELECT 2, 'mamal', 1
UNION ALL
SELECT 3, 'cephalopod mollusc', 1
UNION ALL
SELECT 4, 'salt water fish', 1
UNION ALL
SELECT 5, 'fresh water fish', 1
UNION ALL
SELECT 6,'whale', 2
UNION ALL
SELECT 7,'pirana', 5
UNION
SELECT 8,'shark', 4
UNION
SELECT 9, 'octopus', 3;
GO
WITH Tree AS (
SELECT
id, name, rootid,
CAST('/' + [name] + '/' AS varchar(900)) AS mat_path
FROM
dbo.T1
WHERE
rootid IS NULL
UNION ALL
SELECT
C.id, C.name, C.rootid, CAST(P.mat_path + C.name + '/' AS varchar(900))
FROM
Tree AS P
INNER JOIN
dbo.T1 AS C
ON P.id = C.rootid
SELECT
FROM
Tree
ORDER BY
mat_path;
GO
DROP TABLE dbo.T1;
GO
Excuse my poor knowledge of zoology or animal biology.
AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas -
Dynamic Query in Report Builder
HI
I have a doubt:
I need to receive a parameter in my report and I need this parameter in the query, that means, I need to create a dynamic query depending on the value that I receive in one of the parameters that has my report.
I tried to use the resource of Searching by Reference Cursor tool, it is a blue circle in the Data Model View of Report Builder.
When I click this tool, I have an initial code, It is:
function QR_1RefCurDS return <RefCurType> is
begin
end;
In PL/SQL I tried to create to test and to play, this code:
Note: If you want to try only to test, it is simple and works:
create or replace package TEST_REFCURTYPE as
type refcurtype is ref cursor;
function TEST_REFCURTYPE (P_DATE_TO nvarchar2) return refcurtype;
end;
create or replace package body TEST_REFCURTYPE as
function TEST_REFCURTYPE (P_DATE_TO nvarchar2)
return refcurtype is
refcur refcurtype;
mysql varchar(1000);
begin
If P_DATE_TO is not null then
mysql := 'select '''|| P_DATE_TO ||''' from dual';
else
mysql := 'select sysdate from dual';
end if;
open refcur for mysql;
return refcur;
end;
end;
The problem is to pass this example of code to the function QR_1RefCurDS, I do not have a place to make reference to the type:
type refcurtype is ref cursor;
I tested the Unit Program in the Report Builder but it did not work, because all the code I try to write and create, for example in the Event BEFORE REPORT, it opens Funcion( ) …., and I can not make reference to the type refcurtype inside a Function( ).
Would you help me please?
Or there is another way to make a dynamic query in the Report Builder?
Sorry for my English, I am a Brazilian living in Spain.Hi,
you can use lexical parameters in your queries. Instead of a ":" use in the query before the parameter a "&". Then the parameter stands for a part of the query and not for a value (Bind parameter). In the before report trigger you can set this parameters. They can contain parts of SQL like order or where. Make sure that the default value for this lexical parameters are set to get a valid query.
SELECT ENAME, &p_column as COL2 FROM EMP &p_order
and in the trigger something like
IF :p_which_column = 1 THEN
:p_column := 'SAL'
ELSE
Saludos
Rainer -
How to use dynamic query for this ??
hi , i am new to ABAP. i got a requirement to write dynamic query for the following code.
kindly address. two set of queries are same.but condition is different.
.IF p_psd EQ ' '.
*C--End of change DF 1232137- (Transport # :CIDK980530 )
*C--FETCH THE Deliverd Quantiity and Material Number
SELECT aufnr "ORDER number
wemng "Quantity of goods received for the order item
matnr "MATERIAL NUMBER
pwerk "PLANT
dauat "Order Type
FROM afpo
INTO TABLE t_afpo
WHERE aufnr IN s_order
AND wemng IN s_dqt
AND matnr IN s_matnr
AND pwerk IN s_plant
AND dauat = c_ro.
IF sy-subrc = 0.
SORT t_afpo BY aufnr matnr pwerk.
*C--FETCH THE OBJECT NUMBER
SELECT aufnr "ORDER number
objnr "Object number
FROM aufk
INTO TABLE t_aufk
FOR ALL ENTRIES IN t_afpo
WHERE aufnr = t_afpo-aufnr.
IF sy-subrc = 0.
SORT t_aufk BY aufnr objnr.
*C--FETCH THE Target Quantiity
SELECT aufnr "ORDER number
gamng "Total order quantity target quantity
FROM afko
INTO TABLE t_afko
FOR ALL ENTRIES IN t_afpo
WHERE aufnr = t_afpo-aufnr
AND gamng IN s_tqt.
IF sy-subrc = 0.
SORT t_afko BY aufnr .
ENDIF.
ENDIF.
ELSE.
MESSAGE text-e03 TYPE c_s. " No data for the selection criteria
LEAVE LIST-PROCESSING.
ENDIF.
*C--Begin of change DF 1232137- (Transport # :CIDK980530 )
ENDIF.
IF p_psd EQ c_x.
SELECT aufnr "ORDER number
wemng "Quantity of goods received for the order item
matnr "MATERIAL NUMBER
pwerk "PLANT
dauat "Order Type
FROM afpo
INTO TABLE t_afpo
WHERE aufnr IN s_order
AND wemng > 0
AND matnr IN s_matnr
AND pwerk IN s_plant
AND dauat = c_ro.
if sy-subrc = 0.
*C--FETCH THE OBJECT NUMBER
IF NOT t_afpo[] IS INITIAL.
SORT t_afpo BY aufnr matnr pwerk.
SELECT aufnr "ORDER number
objnr "Object number
FROM aufk
INTO TABLE t_aufk
FOR ALL ENTRIES IN t_afpo
WHERE aufnr = t_afpo-aufnr.
IF sy-subrc = 0.
SORT t_afko BY aufnr gamng.
ELSE.
MESSAGE text-e03 TYPE c_s. " No data for the selection criteria
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
IF NOT t_afpo[] IS INITIAL.
*C--FETCH THE Target Quantiity
SELECT aufnr "ORDER number
gamng "Total order quantity target quantity
FROM afko
INTO TABLE t_afko
FOR ALL ENTRIES IN t_afpo
WHERE aufnr = t_afpo-aufnr
AND gamng <> t_afpo-wemng .
IF sy-subrc = 0.
SORT t_afko BY aufnr gamng.
ELSE.
MESSAGE text-e03 TYPE c_s. " No data for the selection criteria
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
ELSE.
MESSAGE text-e03 TYPE c_s. " No data for the selection criteria
LEAVE LIST-PROCESSING.
ENDIF.
Edited by: Thomas Zloch on Jan 5, 2011 1:30 PM please use code tagsHi friend,
Try using MACRO and dynamic WHERE condition.
Group simialr Select statements under a Macro.
Build a dynamic where by checking conditions
Call macro passing dynamic where condition.
TABLES afpo.
DATA: str TYPE string.
*Macro definition
DEFINE operation.
select single *
from afpo into afpo
where (&1). " Dynamic condition
END-OF-DEFINITION.
*Build dynamic WHERE by checking some conditions
*If conditon
CONCATENATE 'AUFNR = ''000000700008''' 'AND POSNR = ''0001''' INTO str SEPARATED BY space.
*Else
CONCATENATE 'AUFNR = ''000000700008''' 'AND POSNR = ''0002''' INTO str SEPARATED BY space.
*Endif.
*Call Macro passing dynamic WHERE condition
operation str. -
How to create custom BOL object for dynamic query in CRM 7.0
Hi,
Could anyone please explain me with steps that how to create the custom BOL object for dynamic query in CRM 7.0, I did it in previous version but its throwing exception when i try to create the object of my dynamic query class. I just defined the entry of my in crmv_obj_btil to create the dynamic query BOL object. do i need to do any other thing also to make it work?
Regards,
Kamesh Bathla
Edited by: Kamesh Bathla on Jul 6, 2009 5:12 PMHi Justin,
First of thanks for your reply, and coming to my requirement, I need to report the list of items which are there in the dynamic select statement what am getting from the DB. The select statement number of columns may vary in my example for different countries the select item columns count is different. For US its '15', for UK it may be 10 ...like so, and some of the column value might be a combination or calculation part of other table columns (The select query contains more than one table in the from clause).
In order to execute the dynamic select statement and return the result i choose to write a function which will parse the cursor for dynamic query and then iterate the values and construct a Type Object and append it to the pipe row.
Am relatively very new for these sort of things, welcome in case of any suggestions to make it simple (Instead of the function what i thought to work with) also a sample narrating the new procedure will be appreciated.
Thanks in Advance,
mallikj2. -
Help! Inaccessible iterator when using dynamic query
Hi!
I have a problem retreiving results from a dynamic query into sqlj iterator.
I consulted the Oracle App Dev Guide and Oracle SQLJ Dev Guide and wrote the following code:
<PRE>
package pmServer;
#sql iterator LocIterator (int id, String name);
public class pmRISDImpl
public int GetLocations(...)
LocIterator locIt;
String q = "select ID, NAME from PMADM.LOCATIONS";
#sql
BEGIN
open :OUT locIt for :q;
END;
</PRE>
When I try to compile it using tools provided by JDeveloper ver 3.2.2.(Build 915) for JDK 1.2.2 I get error for #sql statement:
Inaccessible Java type for host item locIt (at position #1): pmServer.LocIterator
and warning:
Type pmServer.LocIterator of host item locIt (at position #1) is not permitted in JDBC. This will not be portable.
Althow the code is identcal to those demonstrated in Oracle document "Oracle8 i
SQLJ Developers Guide and Reference
Release 3 (8.1.7)
July 2000
Part No. A83723-01" pp 12-67 (PL/SQL in SQLJ for Dynamic SQLDynamicDemo.sqlj). There it looks like
<PRE>
private static void dynamicSelectMany(String what_cond)
throws SQLException {
System.out.println("dynamic multi-row query on table emp");
Employees empIter;
// table/column names cannot be bind args in dynamic PL/SQL, so
// build up query as Java string
String query = "select ename, sal from emp " +
(((what_cond == null) | | (what_cond.equals(""))) ? "" :
(" where " + what_cond)) +
"order by ename";
#sql {
begin
open :OUT empIter for -- opening ref cursor with dynamic query
:query;
-- can have USING clause here if needed
end;
while (empIter.next()) {
System.out.println("Employee " + empIter.ename() +
" has salary " + empIter.sal() );
empIter.close();
</PRE>
Please guide me what should I do to get it working.
nullIn the CAST statement the SQLJ runtime must be able to produce an instance of you SQLJ iterator using Java reflection.
This necessitates that the iterator class must be accessible by public.
You have two options:
(1) Declare the iterator public. This requires that you put it in its own file LocIterator.sqlj:
#sql public iterator LocIterator (int id, String name);
(2) Declare the iterator as an inner class. In this case you want to make it public static (that is it does not require an instance of the outer class in scope). You might write the following.
package pmServer;
public class pmRISDImpl
#sql public static iterator LocIterator (int id, String name);
(3) If you are using Oracle 9i you have another option. You can embed dynamic SQL fragments directly in your SQLJ code and do not need to use the CAST:
public int GetLocations(...)
LocIterator locIt;
String q = "PMADM.LOCATIONS";
#sql locIt = { select ID, NAME from :{q} }; // Note new syntax :{q} for embedding SQL source code
} -
Ref Cursor Using Dynamic Query
Hi,
I need to use the ref cursor to fetch result from dynamic query.
e.g.
Open ref_test_tbl for Select * from tbl1 where tbl1.field1= :1
and tbl1.field2 =:2 using i_v1,i_v2;
The thing is i_v1, i_v2 are dynamic.
i.e. using clause can include i_v3, i_v4 also.
How to include dynamic variables in the using clause.
thanks> How to include dynamic variables in the using clause.
Cannot using a ref cursor.. (and anyone that post code that writes dynamic PL/SQL in order to achieve this, I will call an idiot).
What you should be using in PL/SQL is a DBMS_SQL cursor. This allows you to create a fully dynamic SQL statement with bind variables. E.g.
select * from tbl1 where col1 = :1
select * from tbl1 where col2 = :1 order by 2
select * from tbl1 where col3 between :0 and :1
Using this dynamically created SQL statement, you can parse it using DBMS_SQL, determine the number of bind variables, and bind each of these dynamically.
You can then execute the SQL and again, dynamically, determine just what the projection of the cursor is. How many columns are returned, their names, data types, precision and so on.
This is what APEX (see http://apex.oracle.com) use extensively in order to run SQLs and render these as reports - all dynamically.
DBMS_SQL is detailed in the [url http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_sql.htm#BABEDAHF]Oracle® Database PL/SQL Packages and Types Reference manual. -
I have a stored procedure that dynamically creates a pivot query. The procedure works and returns the correct data. Now I have a requirement to show this data in reporting system that can only pull from a table or view. Since you can not
create a dynamic query in a view I tried to do a select from using openquery.
Example 'Select * from OpenQuery([MyServername], 'Exec Instance.Schema.StoredProcedure')
I get the error back "the linked server indicates the object has no columns". I assume this is because of the first select statement that is stuffing the variable with column names.
CODE FROM PROCEDURE
Alter PROCEDURE [dbo].[Procedure1]
AS
BEGIN
SET NOCOUNT ON
Declare @cols nvarchar(2000),
@Tcols nvarchar(2000),
@Sql nvarchar (max)
select @cols = stuff ((
Select distinct '], ['+ModelName + ' ' + CombustorName
from CombustorFuel cf
join Model m on cf.modelid = m.modelid
join Combustors cb on cf.CombustorID = cb.CombustorID
where cf.CombustorID > 0
for XML Path('')
),1,2,'')+']'
Set @Tcols = replace(@Cols, ']', '] int')
--Print @Tcols
--Print @Cols
Set @Sql = 'Select GasLiquid, FuelType, '+ @Cols +'
from
Select GasLiquid, FuelType, ModelName+ '' '' +CombustorName ModelCombustor, CombFuelStatus+''- ''+CombFuelNote CombFuelStatusNote
from Frames f
join Family fa on f.Frameid = fa.frameid
join Model m on fa.FamilyID = m.FamilyID
join CombustorFuel cf on m.Modelid = cf.modelid
Join Combustors c on cf.CombustorId = c.CombustorID
join FuelTypes ft on cf.FuelTypeID = ft.FuelTypeID
where cf.CombustorFuelID > 0
and CombustorName <> ''''
) up
Pivot
(max(CombFuelStatusNote) for ModelCombustor in ('+ @Cols +')) as pvt
order by FuelType'
exec (@Sql)Then again, a good reporting tool should be able to do dynamic pivot on its own, because dynamic pivoting is a presentation feature.
SSRS Supports dynamic columns: Displaying Dynamic Columns in SSRS Report
SQL Reporting Services with Dynamic Column Reports
Kalman Toth Database & OLAP Architect
SQL Server 2014 Database Design
New Book / Kindle: Beginner Database Design & SQL Programming Using Microsoft SQL Server 2014
Displaying and reading are two very different things.
#1) SSRS Needs a fixed field list on the input side to know what what to make available in the designer.
#2) SSRS cant read "exec (@Sql)" out of a proc, even if there is a fixed number of columns (at
least it can't use it to auto build the field list from the proc)
I use dynamic SQL in my report procs on a fairly regular basis and I've found it easiest to simply dump
the results of my dynamic sql into a temp table at the end of the procs and then select from the temp table.
Basically, Erland is correct. Stop trying to pivot in the query and let SSRS (or whatever reporting software you're using) handle it with a Martix.
Jason Long -
Sort problem on dynamic query !!
Hi,
I have a dynamic query written in pl/sql, when I check "Sort" for each field in Report Attribute, error message raised up as "ORA-01785: ORDER BY item must be the number of a SELECT-list expression".
If I do not check Sort, it works fine. In my apps I need all fields sorted by user, how to fix this problem?
My query as below:
declare
query varchar2(2000):='select';
s_class varchar2(1000);
cursor c1 is select * from demo_preference;
begin
for c1_val in c1 loop
if c1_val.login is not null then
query := query ||' ' || 'login' || ',';
end if;
if c1_val.id is not null then
query := query ||' ' || 'id' || ',';
end if;
end loop;
query := SUBSTR(query, 1, length(query)-1);
s_class := '(NVL(:P2_class, ''%'' || ''null%'') = ''%'' || ''null%'' OR
EXISTS (SELECT 1 FROM apex_collections WHERE collection_name = ''P2CLASSCOL'' AND c001 = class))';
query := query ||' ' || 'from ming.reg_report_view1 where'
|| ' ' || s_class;
return(query);
end;Maybe the internally mapped column used when you clicked on sort is not shown in the report. Try using aliases when you construct the query string, it could help apex internally in identifying a column even if its order changes for a different user. After all the column order in the code is dynamic and I guess even the no of columns displayed might vary both of which could make sorting on a column identified with a number, invalid.
How about displaying the report query somewhere, so that you know what is the exact query being processed, it might give you better information about the problem.
If the problem persists, then use a collection that is fetched those record using the same query string and change the report to refer the collection and then set column sorting on. This way apex would get confused on what columns are being sorted and it would just sort on a c001..c050 column as though it was a string(yes problems with number columns sorting when you do this). -
How to get 100 latest hits from dynamic query?
Hello,
using a dynamic query like BTQAct returns the 100 first results.
I know how to change the number of results by setting parameter MAX_HITS, but is there a possibility to get the latest 100 results without getting all results and delete the oldest till 100 remains?
In GENIL_BOL_BROWSER I see additional parameters MATCH_TYPE, DROP_SEL_PARAMS_ALLOWED and SELECTION_HINTS, but I don't know, how to use them and what they are doing.
regards
MartinHi Martin,
All the bol parameters that you have mentione dwill not help you unfortunately.
The only facility provided in the wb ui as of now is to automatically customise the no of results (ie max hits),but not the order in which they are displayed.
Though there is a sort option in the table view,which can be enabled throguh html and you can sort the same on any of the date fields tha you have.BUt if you want to do any kind of xtra processing of the search results then you have to do it in eh_onsearch().Here after getting the results collection,you can filtre them on the basis that you want.If you do thsi,you will also be able to delete all the older from the result collection xcept for the 1st 100 like you said.This will ensure that the results are filetred only on the Ui level and no harm is done to the database entires as such. -
Dynamic query in updatable report
I have generated a updatable report with the folowing select:
select
"INSTALLATIEID",
"INSTALLATIEID" INSTALLATIEID_DISPLAY,
"CO_DRUK" druk,
"CO_H2O" h2o,
"CO_O2" o2,
"CO_O2_11" o2_11,
"CO_TEMP" temp
from "#OWNER#"."CORRECTIE"
The table correctie has above the 50 columns (the same columns for different components) so I want to change the query in:
select
"INSTALLATIEID",
"INSTALLATIEID" INSTALLATIEID_DISPLAY,
"&P50_COMP._DRUK" druk,
"&P50_COMP._H2O" h2o,
"&P50_COMP._O2" o2,
"&P50_COMP._O2_11" o2_11,
"&P50_COMP._TEMP" temp
from "#OWNER#"."CORRECTIE"
The item P50_COMP will be filled with a default value and is a select list with submit.
The problem is when I change the query in the above way, the query cannot be parsed and I cannot applay the changes without parsing the query.
Also not when I use Generic Column Names (parse query at runtime only)
Can somebody help me with this problem.Fred,
You should switch to a PL/SQL Function Body Returning SQL Statement (Dynamic Query) in order to achieve this. Your Function would look like this:
declare
l_sql varchar2(32767);
begin
l_sql := 'select
"INSTALLATIEID",
"INSTALLATIEID" INSTALLATIEID_DISPLAY,
"' || :P50_COMP || '._DRUK" druk,
"' || :P50_COMP || '._H2O" h2o,
"' || :P50_COMP || '._O2" o2,
"' || :P50_COMP || '._O2_11" o2_11,
"' || :P50_COMP || '._TEMP" temp
from "#OWNER#"."CORRECTIE"';
return l_sql;
end;Thanks,
- Scott - -
Error in dynamic query while sort allowed is true
Dear all
I m entering search creteria dynamically and search result comes in a table.I have set Sort allowed true for all colum in that table.So when I click on any colum for sorting and then search data, an order by clause will be added before dynamic section of the code.
and query becomes as -
SELECT pp.name,
pp.segment1 project_number,
pp.project_status_code,
pps.project_status_name,
pp.carrying_out_organization_id,
hau.name organization,
pp.project_type,
pp.project_id,
pp.start_date,
pp.completion_date
FROM pa_projects pp,
pa_project_statuses pps,
hr_all_organization_units_v hau
WHERE pp.project_status_code = pps.project_status_code AND
pp.carrying_out_organization_id = hau.organization_id AND
pp.template_flag <> 'Y') QRSLT ORDER BY PROJECT_NUMBER asc AND pps.project_status_name ='Active'
as u can see at the last line of code ' ORDER BY PROJECT_NUMBER asc ' is added before qynamic section 'AND pps.project_status_name ='Active' and it makes query invalid.
If u have any suggestions ,Plz let me know.
Thanks
bhupendraBhupendra,
As per Oracle SQL Standard "Order by clause" always be the last synatx of Query.
As per OAF Standard , always avoid for dynamic query, instead we can create View Object.
As you are created dynamic query with "order by clause" syntax., The code is also adding where clause after the order by clause. So you are getting the error.
So Delete the "order by clause", it will work fine.
After adding the where clause (i.e. AND pps.project_status_name ='Active' ), You should add the setOrderByClause();
Thanks,
Kumar -
Dynamic query and Open Cursor fetch into ??
Hi;
I think we took the wrong turn some were... because looks like a dead end...
What I need to do:
Create a procedure to compare two generic tables in diferente databases and find rows that have diferent data.
(No restritions on what tables it might compare)
What I have done:
CREATE OR REPLACE PROCEDURE COMPARE_TABLES_CONTENT_V3(
tableName_A IN VARCHAR2, tableName_B IN VARCHAR2, filter IN VARCHAR2) AS
-- Get all collumns present in [TableName_A]
-- This is necessary to create a dynamic query
select column_name bulk collect
into v_cols1
from all_tab_columns
where table_name = v_tab1
and owner = nvl(v_own1, user)
order by column_id;
-- If there is no columns in table A ... them no need to proceed
if v_cols1.count = 0 then
dbms_output.put_line('[Error] reading table ' || tableName_A ||
' collumns information. Exit...');
return;
end if;
-- Collect Collumns information by ',' separated, for the query
for i in 1 .. v_cols1.count loop
compareCollumns := compareCollumns || ',' || v_cols1(i);
end loop;
-- Create the query that gives the diferences....
getDiffQuery := 'select ' || compareCollumns ||
' , count(src1) CNT1, count(src2) CNT2 from (select a.*, 1 src1, to_number(null) src2 FROM ' ||
tableName_A ||
' a union all select b.*, to_number(null) src1, 2 src2 from ' ||
tableName_B || ' b) group by ' || compareCollumns ||
' having count(src1) <> count(src2)';
Whats the problem?
I'm lost...I can access the query using debugging on the oracle procedure... and run it OK on a new SQL window. No problem here... its perfect.
But I dont know how to access this information inside the procedure, I need to format the information a bit...
I try a cursor...
open vCursor for getDiffQuery;
fetch vCursor into ??????? -- Into what... query, columns and tables is all dynamic...
close vCursor;
Any ideas..Making the issue more simple....
At this point I have a oracle procedure that generates a dynamic sql query, based on the table names passed by parameter.
getDiffQuery := 'select ' || compareCollumns || (.....)
end procedure;
This ''getDiffQuery'' contains a query that gets the diferences in the tables. (Working fine)
I would like to access this information in the same procedure.
I cant use cursor because the table, columns... actualy all is dynamic based on the generated query:( !
Maybe you are looking for
-
How much future useage for CS6 for a stand-alone photographer?
I'm a semi professional small-scale photographer. It's a hobby, but I do some commercial work. It certainly isn't a living (I have other income) I've been on CS6 for some time. It does absolutely everything that I need, and in fact it's too much. I c
-
I can't boot my MBP or reinstall snow leopard
I have an old 2005 MBP (non unibody) using snow leopard. I urgently need to get it running again since it stopped booting up last feb 2012 and I haven't used it since as I'm using a desktop now. When I turn it on I get no chime and the screen goes gr
-
Canopus ADVC 110 - picture split in two, black and white, distorted sound
Hi there - I've just recently bought a Canopus ADVC 110 - unfortunately I cannot get the picture to display properly - I've spoken to Apple and to Canopus, but neither seems to be able to help me sort this out. Basically my imovies does receive a vis
-
How does full-text search for pdf files work?
Hi there, Basically I can see my pdf file in the content server.. inside the pdf there's a piece of test that says: "Test's Sample" but when I do a search with that string the file gets filtered from the results. I think it has to do with the ' (sing
-
I just bought a PowerMac G4 from eBay. I'm new to Macs and so far I haven't found much info on this model. It is an M5183, 733MHz, 512MB. I would like to upgrade the CPU. What are my options? What should I look for on eBay?