Dynamic query...but I want to maintain performance.
Say I have a simple PL/SQL PROC like this...
PROCEDURE some_proc(p_id IN NUMBER)
IS
v_fn VARCHAR2(100);
BEGIN
SELECT first_name INTO v_fn
FROM tblEmployees
WHERE id = p_id;
dbms_output.put_line('Name is: ' || v_fn);
END;
Now let's say I want to accept another param in the proc which dictates the order...
Looking at the example below, what would be the best way to dynamically allow the query to change depending on what the user passes in the p_order_col parameter? For example, let's say the user passes "last_name" as the parameter...I would want the query to be:
SELECT first_name
FROM tblEmployees
WHERE id = p_id
ORDER BY last_name;
PROCEDURE some_proc(p_id IN NUMBER, p_order_col IN VARCHAR2)
IS
v_fn VARCHAR2(100);
BEGIN
SELECT first_name INTO v_fn
FROM tblEmployees
WHERE id = p_id;
dbms_output.put_line('Name is: ' || v_fn);
END;
Bear in mind I want to make sure that this query maximizes efficiency. I am wondering if by making the order by clause dynamic, it will make too many Hard Parses and not make use of binding. What I am really looking for here is some sort of DBA/performance expert advice on the right way to do this and not fill up the SGA by doing it the wrong way. I don't simply want to know how to do it...looking for the right way. I was thinking that maybe I could use dbms_sql package and open a cursor, then call .parse to my dynamic query string, then .bind_variable for the p_id. Is that the right start?
Thank you for the quick reply. Theoretically it could be any number of columns. I tried to use a simple example, but in reality it would have to be dynamic for a few reasons...
1) My example is not so simple...to explain it here would take a lot of time...however tblEmployees is a huge query in reality...I was just trying to simplify for my post.
2) I need to order by on possibly multiple rows and that order needs to be dynamic.
I like your decode suggestions, but unfortunately I can't use it here.
Would doing something like this still allow me to make use of binds? Granted, I realize every query which has a different order by clause would qualify as a different query.
v_cursor INTEGER;
v_emp_name VARCHAR2(100);
v_cursor := dbms_sql.open_cursor;
dbms_sql.parse(v_cursor,'SELECT first_name AS emp_name FROM tblEmployees WHERE id = :p_id ORDER BY ' || p_order_col,dbms_sql.native);
dbms_sql.bind_variable(v_cursor, ':p_id', p_id);
dms_sql.define_column(v_cursor,1,v_emp_name);
v_rows := dbms_sql.execute(v_cursor);
LOOP
IF dbms_sql.fetch_rows(v_cursor) = 0 THEN
EXIT;
END IF;
dbms_sql.column_value(v_cursor,1,v_emp_name);
END LOOP;
dbms_sql.close(v_cursor);
dbms_output.put_line('Name: ' || v_emp_name);
Similar Messages
-
Conditional URL ( CASE ) within a Dynamic Query
I need extra eyes or help in RE-FORMATTING the following SELECT STMT. My approach was to formulate the following query to get a functioning URL to the page that displayed the corrections made on that record (if it was corrected)...which I did. So now I'm trying to move the CASE portion into a dynamic query report. I'm having difficulties rewriting the CASE into the dynamic query due to placement of single-quotes. Is there an easy way to do this...or do I still need to find the correct placement of quotes? HELP!
select "ID",
"EMP_ID",
"ENTRY_DATE",
"JOB_TITLE",
"START_DATE",
"END_DATE",
"MODIFIED_DATE",
"lkup_1"."DESCRIPTION" as "Status",
CASE
WHEN rec_status = 'CR' -- corrected record
THEN '<a href="'
|| 'f?p=&APP_ID.:90:&SESSION.::&DEBUG.::'
|| 'P90_RID,P90_TIMESTAMP:'
|| rid ||',' || TO_CHAR(modified_date,'MM/DD/YYYY')
|| ">'
|| 'See Update(s)'
|| '</a>'
|| '</a>'
ELSE NULL
END LINK,
"lkup_2"."DESCRIPTION" as "Action",
"CATEGORY",
apex_item.checkbox(1,rid) as "Confirm"
from "JOB_SUMMARIES",
"LOOKUPS" "lkup_1",
"LOOKUPS" "lkup_2"
where "REC_STATUS" <> 'CF'
and "REC_STATUS" = "lkup_1"."CODE"
and "ACTION" = "lkup_2"."CODE"(+)
Here is what I sort of come up with, but I'm getting dizzy looking at it so many times!
' CASE '||
' WHEN rec_status = ' || '''' || '''CR''' || '''' ||
' THEN ' || '''' || '<a href="' || '''' ||
' ||' || '''' || 'f?p=&APP_ID.:90:&SESSION.::&DEBUG.::' || '''' ||
' ||' || '''' || 'P90_RID,P90_TIMESTAMP:' || '''' ||
' ||' || ' id ||' || '''' || ''',''' || '''' || '|| TO_CHAR(modified_date,' || '''' || 'MM/DD/YYYY' || '''' || ')' || '''' ||
' ||' || '''' || ">' || '''' ||
' ||' || '''' || 'See Update(s)' || '''' ||
' ||' || '''' || '</a>' || '''' ||
' ||' || '''' || '</a>' || '''' ||
' ELSE NULL '||
' END LINK, '||
I'm still getting an error which is:
1 error has occurred
* Query cannot be parsed within the Builder. If you believe your query is syntactically correct,
check the ''generic columns'' checkbox below the region source to proceed without parsing.
ORA-00905: missing keywordI still cannot get the insertion of the CASE to compile...I keep getting MISSING EXPRESSION error.
1 error has occurred
* Query cannot be parsed within the Builder. If you believe your query is syntactically correct,
check the ''generic columns'' checkbox below the region source to proceed without parsing.
ORA-00936: missing expression
Here is my dynamic query and I want to place the CASE as indicated. The numerous quotes or the Q syntax is really messing up my attempts to get this page working. I have a dynamic query because I am allowing search parameters. And I thought it would be nice to have a LINK to another page that displayed changed column values if a user CORRECTED one of their records. All changes must be verified and accepted by a REVIEWER.
declare
q varchar2(32767); -- query
w varchar2(4000) ; -- where clause
we varchar2(1) := 'N'; -- identifies if where clause exists
begin
q := 'select "ID", '||
' "EMP_ID", '||
' "ENTRY_DATE", '||
' "JOB_TITLE", '||
' "START_DATE", '||
' "END_DATE", '||
' "lkup_1"."DESCRIPTION" as "Status", '||
>WANT TO PLACE CASE RIGHT HERE
' "lk_up2"."DESCRIPTION" as "Action", '||
' "CATEGORY", '||
' apex_item.checkbox(1,rid) as "Confirm" '||
' from "#OWNER#"."JOB_SUMMARIES", '||
' "#OWNER#"."LOOKUPS" "lkup_1", '||
' "#OWNER#"."LOOKUPS" "lkup_2" '||
' where "REC_STATUS" <> ' || '''' || 'CF' || '''' ||
' and "REC_STATUS" = "lkup_1"."CODE" '||
' and "ACTION" = "lkup_2"."CODE"(+) ';
if :P16_EMP_ID != '-1'
then
w := ' AND EMP_ID = :P16_EMP_ID ';
we := 'Y';
end if;
if :P16_RECORD_STATUS != '-1'
then
w := w || ' AND REC_STATUS = :P16_RECORD_STATUS ';
we := 'Y';
end if;
if :P16_CATEGORY != '-1'
then
w := w || ' AND CATEGORY = :P16_CATEGORY ';
we := 'Y';
end if;
if we = 'Y'
then q := q || w;
end if;
return q;
end;
Edited by: JSandoval on Aug 10, 2009 3:42 PM -
Help on performance with dynamic query
Hi All,
We are using SQL Server 2008R2. In our one of report we are using Dynamic query and it is taking more time to retrieve the data. to retrieve 32 records it is taking 13-15 secs. In my observation in a table variable, created more than 60 columns. In
the SP called one more sp with insert statement.
Please let me know how i can improve performance of the SP.
I know that i have to provide the SP for observation but unfortunately I cannot provide the SP. Please guide me how i can achieve this .
I tried with temp tables by creating indexes on temp tables but i couldn't find improvement in performance.
Waiting for valuable replies.First of all a "dynamic query" is not "a query" - it is a multitude of them. Some of them may be fast, others may be slow.
There is of course no way we can give specific suggestions without seeing the code, the table and index definitions etc.
We can only give the generic suggestions. As for the code, make sure that you are using parameterised SQL and you are not building a complete SQL string with parameters and all. If nothing else, this helps to make the code more readable and maintainable.
It also protects you against SQL injection. And it also helps to prevent performance issue due to implicit conversion.
You will need to look at the query plan to see where the bottlenecks may be. You should look at the actual query plan. Note that the thickness of the arrows are more relevant than the percentages you see; the percentages are only estimates, and estimates
are often off. Next step is to see if you can add indexes to alleviate the situation. You should also analyse if there are problems in the query, for instance indexed columns that are entangled in expression. If you are using views, make sure that you don't
have views built on top of views etc. This can often result a table appearing multiple times in a query, when one would be enough.
Erland Sommarskog, SQL Server MVP, [email protected] -
How to display or generate PDF417 barcode dynamically in PDF form? I am using Acrobat XI Professional and there is a Bar Code Field in the same through which I generated the same. But I want to generate the same dynamically.
What do you mean by dynamically? When yo set up a 2D bar code field you specify which field name/value pairs you want to include, along with other parameters. But be aware that they won't work with Reader unless you Reader-enable the document with LiveCycle Reader Extensions and include the bar code usage right. It will work with Acrobat Standard/Pro.
-
We wanted to perform backup from command prompt but we want
OS: :Linux
DB version: 10.2
I am doing weekly hot backup.
I used rman for my backup.
No issue on backup.
I just ran the backup succesufully (on 070307).
But Enterprise Manager is not updated.
Its still showing last backup performed on 07 Nov 2006.
But from command prompt by using rman its showing current backup (on 070307).
I think EM shown backup status only
if user used EM to perform backup.
Is it correct?
If yes how to fix this issue, we wanted to perform backup from command prompt but we want backup status should be updated in the EM simultaneously.
DHi,
Within EM it is assumed that a control file backup will take place unless you specifically ask it to perform through a recovery catalog. I can't remember at the moment how to do this as I am at home but when you go into the admin/maintenance side of EM there will be an option to chose recvoery catalog. However saying that, EM should still report back even if a control file backup has been carried out.
also i think if you are using a comand prompt then EM will not know about it. You will have to define the job from EM for it to register.
rgds
alan -
Question on Dynamic Query Data Source and Form Folders in Oracle Forms 6i
Hi there -
I have one interesting requirement in Oracle Forms.
This is what I wanted to do.
1. Have a LOV and Go button on Form.
2. From LOV, I will select a pre-defined custom table and click Go.
3. Based on the selected custom table, I have to populate the Block (Tabular Format).
4. User should be able to do update, delete, insert on this block.
5. User should be able to use the Oracle Form folders functionality (select only necessary column and save views etc. Std folder functionality).
6. If user selects a different custom table name in the LOV on top, I need to refresh the data from the block based on this new table. Remaining functionality should be as it is (steps 3 to 5).
You can see here, I am going to have dynamic query data source (Table Name as well as column mapping) on the block. I do not know before hand how many columns the user selected table has!
This is what I have planned for this so far but I have some major questions before I can move on with this design:
1. I am going to create a table structure with fixed number of column in form (40 cols assuming that the custom table will not have more that 40 cols). (Kind of limitation but it's okay as of now).
2. Dynamically populate the block based on the table name selected by the user from LOV. Dynamically change the table column names based on the table selected etc.
3. Perform insert, update, delete using PL/SQL package.
So far it looks okay.
Now my real question is,
Can user still be able to user "Folders" functionality here? I have never done this kind of development before and I doubt the dynamic column naming, dynamic column data source will really work for "folders"!
Also, I am not really sure whether user will be able to save these "folder" queries?
Okay so form experts, can you ppl suggest me if this is really going to work? Are there any better ways to do this?
Initially I tried to do this in OA Framework but I got stuck at because as per OAF developer guide "I cannot user OAF personalization for dynamic items, regions etc".
For more info on that thread see this link...
Re: setUserCustomizable issue!
Thanks in advance for the help.Any suggestion anyone?
-
Execute dynamic query stored as varchar in a different table.
Hi,
I have a table with a column as query,which stores the query i want to fire.for eg.my query will be like :-
Select name,empid from employees where name =null
Now,I have a stored procedure in which i have declared a variable @query .I want to replace the following line of code .
if exists(Select name ,empid from employees where name=null)
begin
--send mail
end
as
if exists(@query)
But it doesnt seem to work because it is taking the @query as varchar and not an actual t-sql command.I want to keep the query dynamic as each row in my table has a different query to fire.And only to clarify Praveen's solution:
DECLARE @DynamicSQl nvarchar(250), @x nvarchar(100)
SELECT @x = '@retVal int output'
DECLARE @retVal int
SET @DynamicSQl = 'SET @retVal = CASE WHEN EXISTS (' + @query + ') THEN 1 ELSE 0 END'
EXEC sp_executesql @DynamicSQl, @x, @retVal output
IF @retVal > 0
BEGIN
print 'send mail'
END
However, Nimo should probably have some error handling, as the stored query may not be syntactically correct. And even if it is syntactically correct, it may not play well with EXISTS. Case in point: a query that starts with a CTE.
And of course, if any user is permitted to add these queries, and this code is exeuted with high permissions, they can inject queries that perform evil things they don't have permissions to do themselves, so be careful.
Erland Sommarskog, SQL Server MVP, [email protected] -
Greetings. My ultimate goal is to be able to type in an account number in a browser enabled InfoPath form textbox and have it retrieve information about that account (customer's name, address, etc.). I've set up an External content type
to a SQL table with 100,000+ rows and created the external list to hold the data (after disabling the throttling limits). I set a filter when creating the ECT and can't filter the data any more for my purposes. I increased the data
connection timeouts and response sizes in InfoPath just to see how long it would take to retrieve this data in InfoPath so that I could use a form to interface and query the data. The performance of the form is unacceptable to me as it took nearly 7
minutes to load. So, my question: are there alternatives to custom code that will work for my situation? Can I somehow dynamically set the content type filter through an InfoPath field so that I need not query all 100,000 records? I
know I can dynamically adjust a querystring directly to SQL through C# or VB but I'm trying to avoid that because I want to publish my form as a site content type (as opposed to an administrator approved form template).
Thanks in advance.
Andy
Hi,
According to your post, my understanding is that you wanted to dynamic query from Infopath.
I recommend to add code to the "click" event of a button to modify a SQL Server secondary data connection to use a "filter" from your form.
Here is a similar thread for your reference:
http://social.technet.microsoft.com/Forums/en-US/5aa4519c-b8e0-4a7c-85b4-09f7e1d0747a/dynamic-sql-data-connection-in-infopath?forum=sharepointcustomizationprevious
Best Regards,
Linda Li
Linda Li
TechNet Community Support -
Hi all;
Can u please help me on the following dynamic query code ? I know I am missing the single quote around 2 dates but could not figure out where to put it ! I have tried putting 2 or 3 quotes around 2 bind vars but to no avail.
Want to create a dynamic query to simulate the the following:
select
EMPNO,ENAME,JOB,MGR,HIREDATE from emp where HIREDATE >= to_date('01/01/1981','MM/DD/YYYY') and HIREDATE <= to_date('12/31/1982','MM/DD/YYYY');
dynamic code:
declare
v_q varchar2(4000);
begin
v_q :='select EMPNO,ENAME,JOB,MGR,HIREDATE from emp ';
V_q := V_Q
|| 'where HIREDATE >= '
|| 'to_date(' || :P_DATE1 || ',' ||'''MM/DD/YYYY''' || ' )'
|| 'and HIREDATE <= '
|| 'to_date(' || :P_DATE2 || ',' ||'''MM/DD/YYYY''' || ' )';
-- end the sql
v_q := v_q ||';';
dbms_output.put_line ('V_Q is ' || V_Q);
end;
Thanks.
Zendeclare
v_q varchar2(4000);
v_rec emp%rowtype;
v_cur sys_refcursor;
begin
v_q :='select EMPNO,ENAME,JOB,MGR,HIREDATE from emp ';
V_q := V_Q || 'where HIREDATE >= to_date(:P_DATE1,''MM/DD/YYYY'') and HIREDATE <= to_date(:P_DATE2,''MM/DD/YYYY'')';
dbms_output.put_line ('V_Q is ' || V_Q);
open v_cur
for v_q
using '01/01/1981',
'12/31/1982';
loop
fetch v_cur
into v_rec.empno,
v_rec.ename,
v_rec.job,
v_rec.mgr,
v_rec.hiredate;
exit when v_cur%notfound;
dbms_output.put_line('empno = ' || v_rec.empno);
dbms_output.put_line('ename = ' || v_rec.ename);
dbms_output.put_line('job = ' || v_rec.job);
dbms_output.put_line('mgr = ' || v_rec.mgr);
dbms_output.put_line('hiredate = ' || to_char(v_rec.hiredate,'MM/DD/YYYY'));
dbms_output.put_line('====================');
end loop;
close v_cur;
end;
V_Q is select EMPNO,ENAME,JOB,MGR,HIREDATE from emp where HIREDATE >=
to_date(:P_DATE1,'MM/DD/YYYY') and HIREDATE <= to_date(:P_DATE2,'MM/DD/YYYY')
empno = 7499
ename = ALLEN
job = SALESMAN
mgr = 7698
hiredate = 02/20/1981
====================
empno = 7521
ename = WARD
job = SALESMAN
mgr = 7698
hiredate = 02/22/1981
====================
empno = 7566
ename = JONES
job = MANAGER
mgr = 7839
hiredate = 04/02/1981
====================
empno = 7654
ename = MARTIN
job = SALESMAN
mgr = 7698
hiredate = 09/28/1981
====================
empno = 7698
ename = BLAKE
job = MANAGER
mgr = 7839
hiredate = 05/01/1981
====================
empno = 7782
ename = CLARK
job = MANAGER
mgr = 7839
hiredate = 06/09/1981
====================
empno = 7839
ename = KING
job = PRESIDENT
mgr =
hiredate = 11/17/1981
====================
empno = 7844
ename = TURNER
job = SALESMAN
mgr = 7698
hiredate = 09/08/1981
====================
empno = 7900
ename = JAMES
job = CLERK
mgr = 7698
hiredate = 12/03/1981
====================
empno = 7902
ename = FORD
job = ANALYST
mgr = 7566
hiredate = 12/03/1981
====================
empno = 7934
ename = MILLER
job = CLERK
mgr = 7782
hiredate = 01/23/1982
====================
PL/SQL procedure successfully completed.
SQL> SY. -
Dynamic query in where clause while looping in an internal table.
Hi,
Had a small question : How can i make a dynamic query for the WHERE clause while looping at an internal table.
i want to implement a dynamic where clause query for the below example.
it_cfx_col is an internal table and wa_cfx_col is a work area for it_cfx_col
DATA :
i_cfx_col TYPE TABLE OF cfx_col,
wa_cfx_col LIKE LINE OF i_cfx_col.
DATA : count TYPE i VALUE 0.
DATA : l_where_clause TYPE string,
l_where_clause2 TYPE string,
l_name type string.
l_name = 'NANDANOM'.
l_scenario = 'collaboration'.
LOOP AT it_cfx_col INTO wa_cfx_col
WHERE CREATED_BY = l_name
AND SCENARIO = l_scenario.
count = count + 1.
some business logic implemented using the work area wa_cfx_col
endloop.
Now i want to write a dynamic query for the where clause.
DATA : count TYPE i VALUE 0.
DATA : l_where_clause TYPE string,
l_where_clause2 TYPE string,
l_name type string.
l_name = 'NANDANOM'.
l_scenario = 'collaboration'.
l_where_clause = 'CREATED_BY = l_name'.
l_where_clause2 = 'AND SCENARIO = l_scenario'.
if l_scenario is not initial.
CONCATENATE l_where_clause l_where_clause2
INTO l_where_clause SEPARATED BY space.
endif.
LOOP AT i_cfx_col INTO wa_cfx_col
WHERE (l_where_clause).
count = count + 1.
some business logic implemented using the work area wa_cfx_col
endloop.
when i compile this i get an error message as { Statement concluding with "...(l_where_clause)" ended unexpectedly}
Even i changed the initilization of the variable l_where_clause2 to [ l_where_clause2 = 'AND SCENARIO = l_scenario.'. ]
added the end of line demarkation ".", but still i got the same error message.
Is it a limtation in ABAP that i cannot write a dynamic query for the where clause while looping at an internal table?
Regards,
omHi savita,
there in no such 1 limitaion in abap for dynamic query .. i think the error meassge is only beacuse of your synatx delcartaion.
>> LOOP AT i_cfx_col INTO wa_cfx_col
WHERE (l_where_clause).
count = count + 1.
some business logic implemented using the work area wa_cfx_col
endloop.
afted delclarataion also , in the where statement you should specify both the field name and value bname
LOOP AT i_cfx_col INTO wa_cfx_col
WHERE l_where_clause = 'CREATED_BY = l_name' .
count = count + 1.
hope it helps.
regads
priya. -
How to create an LOV based on a dynamic query
Hi,
Can someone tell me how to query a dynamic query for LOV. On my base page I have a dropdown-box (that will show the table names for searching) and is dynamically populated based on users access e.g. if user A logs in he may see 5 values (these values are basically table names) in a drop down if user B logs in he may see 10 values. I also have two input fields one field a user can enter value and the other field is read only and a torch icon for LOV so the user can search and select values that are populated in the input fields on the base page.
How can I have my LOV that takes in a value selected in the dropdown and anyvalue entered in one of the input fields and search in the table selected in the dropdown box.
Basically my LOV should do a search on the table and some search value passed when clicking on the torch icon. So a user can select any table-name in the drop down and my LOV should do a search only on the selected table. Once on the LOV Popup want to have a search field there but it only searched on the table selected in the dropdown on the based page. And the selected value on the LOV Popup page gets populated in fields on the base page.
Any help is appreciated.
ThanksHi,
I have created 4 SQL Based VO's with the following sqls
SELECT header_id AS ID, to_char(order_number) AS NAME
FROM oe_order_headers_all
SELECT party_id AS ID, party_name AS NAME
FROM hz_parties
SELECT quote_header_id AS ID,
(quote_number || CHR (45) || quote_version) AS NAME
FROM aso_quote_headers
SELECT sales_lead_id AS ID, to_char(lead_number) AS NAME
FROM as_sales_leadsI created on LOVRegin and have the following 2 messagestyle items now what do I set in the ViewInstance and View Attribute fields
srcid
srcname
Can you provide some sample code to set ViewUsage and whereclause that I need to put in the controller of LOVRegion.
Thanks -
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 -
ADF table based on dynamic query
I am new in JDeveloper and ADF.
I want to add an updatable ADF table on a JSF page, but I want to use
dynamic criteria for the query on which the table will be based on.
The user will fill in some fields then press a button. Then a daynamic
where clase will be created and the table
will be populated.
How can I do this?Hi,
You should get aquainted with ViewCriteria for your ViewObject. -
Dynamic query to produce crosstab/pivot report
Hello,
I've not been able to find any examples similar to my situation but perhaps I'm using the wrong search phrases...
I'm basically trying to create a cross-tab type report based on a dynamic query (since I do not know how many accounts a person has):
select ' SELECT x.name, x.type, ' from dual
union
select ' max(decode(x.account,'''||m.account||''',x.amount,null)) as "'||substr(s.proj||' '||m.account,1,30)||'",'
from db1.manager m, db1.person p, pi.charges c, db1.status s
where m.manager_id = p.id
and M.ACCOUNT_ID = C.ACCT_ID
and M.ACCOUNT_STRING = S.project
and C.JNL = (select max(id) from db1.journ j where j.TYPE ='M')
and p.username = :username
and nvl(M.END_DATE, sysdate +1) >= sysdate
group by m.account, s.proj
union
select 'sum(x.amount) grand_total from (select m.account, c.name, c.type, c.amount '
||'from db1.manager m, db1.person p, pi.charges c '
||'where m.manager_id = p.id '
||'and p.username = :P68_PRINC '
||'and c.acct_id = m.account_id '
||'and c.jnl = (select max(id) '
||'from db1.journ j where j.TYPE =''M'')) x '
||' group by type, name' from dualThe output from this query for the particular manager I selected is:
SELECT x.name, x.type,
max(decode(x.account,'12012',x.amount,null)) as "Internal 12012",
max(decode(x.account,'17929',x.amount,null)) as "Staged 17929",
max(decode(x.account,'18054',x.amount,null)) as "Help Software 18054",
max(decode(x.account,'3428',x.amount,null)) as "Mow 3428",
max(decode(x.account,'3428',x.amount,null)) as "Mow 3428_1",
max(decode(x.account,'3508',x.amount,null)) as "Stampede 3508",
max(decode(x.account,'9102',x.amount,null)) as "Open Collaborative 9102",
sum(x.amount) grand_total
from (select m.account, c.name, c.type, c.amount
from db1.manager m, db1.person p, pi.charges c
where m.manager_id = p.id
and p.username = :P68_PRINC
and c.acct_id = m.account_id
and c.jnl = (select max(id)
from db1.journ j where j.TYPE ='M')) x
group by type, nameThis query generates another query that ultimately produces the report below (please pardon the alignment) that I want to see on a report page.
NAME TYPE Internal 12012 Staged 17929 Help Software 18054 Mow 3428 Mow 3428_1 Stampede 3508 Open Collaborative 9102 GRAND_TOTAL
#EXAM1221 M 22 22
#EXAM1222 M 14.83 14.77 12.56 2.22 44.38
#EXAM1223 M 6.73 6.7 5.7 1 20.13
THOEORY M 106.5 106.5Should I be using the report type that is based on a 'PL/SQL function body returning SQL query' for this type of report??? If so, how does that get set up?
Thanks in advance!
~JakeThis solution works in that it generates the proper query. I can copy the query (from debug mode) and paste it in TOAD and it works perfectly. However, in the report page it tells me: "report error:ORA-01403: no data found".
I found this thread: report error: ORA-01403: no data found when SUM columns
I did have a couple other regions on the page (previous attempts) that were hidden so I deleted them completely. Still no luck.
I am also summing up several columns...if that has anything to do with it.
Does anyone have any suggestions?
Thanks again!!!
~Jake
Edited by: jhammer on Jul 27, 2010 11:02 AM -
Create table problem using Dynamic Query
Hi all,
I want to create a temporary table within a stored procedure so I decided to do it using a dynamic query:
create or replace procedure p1
as
begin
execute immediate 'CREATE GLOBAL TEMPORARY TABLE tt(id number(2))';
end;
/ It created successfuly but when I execute that procedure I got:SQL> exec p1;
BEGIN p1; END;
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SCOTT.P1", line 4
ORA-06512: at line 1 While I can create that table using the same user without any problem!
My question is:What privilege should I grant to user(minimum of privileges please! ) to execute that procedure successfuly?
-ThanksHi,
To say a little bit more about Nicolas' answer:
SQL> grant create table to scott;
This is the right answer, but you might wonder why you have to do so if you usually can create tables with this user..
11:59:19 TEST.SQL>CREATE USER UTEST
11:59:28 2 IDENTIFIED BY UTEST;
User created.
11:59:35 TEST.SQL>CREATE ROLE RTEST;
Role created.
11:59:40 TEST.SQL>GRANT RTEST TO UTEST;
Grant succeeded.
11:59:45 TEST.SQL>GRANT CREATE SESSION TO RTEST;
Grant succeeded.
11:59:54 TEST.SQL>GRANT CREATE TABLE TO RTEST;
Grant succeeded.
12:00:03 TEST.SQL>GRANT UNLIMITED TABLESPACE TO UTEST;
Grant succeeded.
12:00:17 TEST.SQL>CREATE PROCEDURE UTEST.CT_TEST
12:00:32 2 IS
12:00:33 3 BEGIN
12:00:35 4 EXECUTE IMMEDIATE 'CREATE TABLE UTEST.TTEST (A NUMBER)';
12:00:56 5 END;
12:00:58 6 /
Procedure created.
12:00:59 TEST.SQL>EXEC UTEST.CT_TEST;
BEGIN UTEST.CT_TEST; END;
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "UTEST.CT_TEST", line 4
ORA-06512: at line 1
12:01:06 TEST.SQL>GRANT CREATE TABLE TO UTEST;
Grant succeeded.
12:01:15 TEST.SQL>EXEC UTEST.CT_TEST;
PL/SQL procedure successfully completed.Don't forget that when you're using PL/SQL, privileges granted via roles are ignored!
Regards,
Yoann.
Maybe you are looking for
-
Resultset returns null while calling a DB2 stored procedure using hibernate
Hi All , I am trying to call a db2 stored proc with cursor open from my java code but it always returns me null results though it executes fine when I call the procedure from the command line Java code.................... CallableStatement stmt3 = Ey
-
Sims 2 Mac OS X 10.8 Powerpc applications no longer supported
I have recently purchased the entire Sims 2 collection for use on my fairly new MacBook Pro, Version OS X Mountain Lion 10.8.4 However, I am unable to install the game due to 'Powerpc applications to longer being supported' being displayed when I cli
-
Regarding my previous question about photo stream, the answer Winston Churchill gave was that it will stream pictures that have been uploaded since it was installed. It is not doing that instead it is streaming my really old pictures, which I thought
-
My computer isn't loading everything fully on Safari now. I can't get into my Gmail. It just stops loading.
-
hi! i had to reinstall my tarantella server and i thought .. hey there is a new sles version out (sles11). so i thought lets try it with latest tarantella version! works fine without ssl. but first problem: a kde4 konsole won't start i have changed t