Calling pipelined function recursively
Hi,
I want to call Z_Get_Subprojects1 function recursively so that i get the childs for all the levels.
please tell is my approach correct.
SELECT *
FROM TABLE (Z_Get_Subprojects1(5060097))
it is giving me only level one projects.
CREATE OR REPLACE FUNCTION Z_Get_Subprojects1 (Prog_id IN NUMBER)
RETURN Ref_Pkg.abc1 pipelined
IS
CURSOR Cur(progid NUMBER)
IS
SELECT
d.ID CHILD_ID, d.UNIQUE_NAME CHILD_UNIQUE_NAME,d.is_program flag
FROM
srm_projects a,
prTask b,
prSubProject c,
srm_projects d
WHERE
a.id = b.prProjectID
AND b.prID = c.prTaskID
AND c.PRREFPROJECTID=d.id
AND a.id=progid
r_ytd_costs abc%ROWTYPE;
BEGIN
FOR c IN cur( Prog_id)
LOOP
r_ytd_costs.childid := c.child_id ;
PIPE ROW(r_ytd_costs) ;
SELECT childid INTO temp1
FROM TABLE (Z_Get_Subprojects1(c.child_id));
END LOOP;
RETURN ;
END;
/
yes i agree that we can use connect by but i need to stop at a point where a project is not a program.
whether a project is a program or not is obtained by a field is_program of srm_projects table.
i tried to use the query below using connect by but got incorrect results.
please check if i am using it correctly.
SELECT a.id parent_id,a.name,a.unique_name,d.id child_id,d.name,d.unique_name FROM
SRM_PROJECTS a,
PRTASK b,
PRSUBPROJECT c,
SRM_PROJECTS d
WHERE
a.id = b.prProjectID
AND b.prID = c.prTaskID
AND c.PRREFPROJECTID=d.id
START WITH a.id IN (SELECT id FROM SRM_PROJECTS WHERE is_program=1
MINUS
SELECT PRREFPROJECTID FROM PRSUBPROJECT)
CONNECT BY PRIOR d.id=a.id
ORDER BY a.name
Similar Messages
-
Calling virtual function recursively
Hello,
I have a virtual function foo() in class A which, under certain conditions, will call itself.
In a class B, which is derived from A, I am overriding foo() to call super.foo() and then execute come code.
My question is:
When the code in class A executes, the recursive call this.foo() will call the function in class B (because I am in a class B object), no?
If it does, what syntax can I use to make it call the function in the context of class A, although the code is running in an object of class B?
Thank you.Yes, and the obvious solution is to move the implementation in A out to a private recursive method foo_inner() and get A.foo() to just call foo_inner().
-
Calling an pipeline function in a Select query
Hello gurus ,
i have a query calling pipeline function
WITH t AS
(SELECT dep_code, emp_id
FROM test1
WHERE dep_code = 'C1' AND emp_id = '123')
SELECT *
FROM TABLE
(CAST
((pk_get_emp_dtls.fn_t_get_emp_dtls (t.dep_code,
t.empid,
TRUNC (SYSDATE)
) AS ps_ot_emp_dtls
t;in this above query i want to use the emp id ,dept code from the with clause as parameters in the function pk_get_emp_dtls.fn_t_get_emp_dtls
but error occures SQL command not ended properly
Regards,
Friend
Edited by: most wanted!!!! on Nov 14, 2012 6:17 AMI see Solomon beat me to it...
SQL> create or replace type o_emp as object (empno number, ename varchar2(10))
2 /
Type created.
SQL>
SQL> create or replace type t_emp as table of o_emp
2 /
Type created.
SQL>
SQL> create or replace function get_emp(p_deptno in number) return t_emp pipelined as
2 v_emp o_emp := o_emp(null,null);
3 cursor cur_emp is
4 select empno, ename
5 from emp
6 where deptno = p_deptno;
7 begin
8 for i in cur_emp
9 loop
10 v_emp.empno := i.empno;
11 v_emp.ename := i.ename;
12 pipe row (v_emp);
13 end loop;
14 return;
15 end;
16 /
Function created.
SQL>
SQL>
SQL> with t as (select deptno from dept where dname = 'SALES')
2 select x.*
3 from t, table(get_emp(t.deptno)) x
4 /
EMPNO ENAME
7499 ALLEN
7521 WARD
7654 MARTIN
7698 BLAKE
7844 TURNER
7900 JAMES
6 rows selected.
SQL> with t as (select deptno from dept where dname = 'SALES')
2 select x.*
3 from table(get_emp(t.deptno)) x, t
4 /
from table(get_emp(t.deptno)) x, t
ERROR at line 3:
ORA-00904: "T"."DEPTNO": invalid identifier -
Recursive call of function module 'CRM_ORDER_MAINTAIN'
Hi together,
I have got the follwoing problem.
We have to implement a proof on a partner function regarding the role.
I found the BADI IF_EX_COM_PARTNER_BADI~COM_PARTNER_CHECK
I implement the the follwoing coding:
IF is_partner_wrk-partner_fct = 'ZADI0012'.
SELECT SINGLE * INTO ls_but100
FROM but100
WHERE partner = is_partner_wrk-external_partner_number
AND rltyp = 'BUP004'.
IF sy-subrc = 4.
MESSAGE e003(crm_ic_partner) WITH is_partner_wrk-external_partner_number.
ENDIF.
ENDIF.
when I enter a partner with a wrong role, I got the message I have implemented. Afterwards I type in a partner with the correct role I got a short dump.
Recursive call of function module 'CRM_ORDER_MAINTAIN'
Has anybody an idea how to solve this issue?
Thanks and best regards,
SylviaHi scharfen,
We got the similar requirement what you implemented.I implemented the below code but the error message is coming 3 times.
I have got the follwoing problem.
We have to implement a check on a partner function regarding the role.
I found the BADI IF_EX_COM_PARTNER_BADI~COM_PARTNER_CHECK
I implemented the the follwoing coding:
method IF_EX_COM_PARTNER_BADI~COM_PARTNER_CHECK .
DATA: lw_but100 TYPE but100,
lw_but000 TYPE but000,
lw_msgno TYPE bal_s_idno,
lt_msgno TYPE bal_r_idno,
l_partner TYPE symsgv,
lw_low TYPE balmsgidno.
IF is_partner_wrk-PARTNER_FCT = '00000009'.
SELECT SINGLE * INTO lw_but000
FROM BUT000
WHERE partner = is_partner_wrk-external_partner_number
AND TYPE = '2'.
IF sy-subrc EQ 0.
SELECT SINGLE * INTO lw_but100
FROM but100
WHERE partner = is_partner_wrk-external_partner_number
AND rltyp = 'BUP004'.
IF sy-subrc = 0.
REFRESH lt_msgno.
lw_msgno-sign = 'I'.
lw_msgno-option = 'EQ'.
lw_low-msgid = '/DS1/A'.
lw_low-msgno = '139'.
lw_msgno-low = lw_low.
APPEND lw_msgno TO lt_msgno.
CALL FUNCTION 'CRM_MESSAGES_DELETE'
EXPORTING
IT_R_MSGIDNO = lt_msgno
iv_ref_object = is_partner_wrk-guid.
l_partner = is_partner_wrk-external_partner_number.
CALL FUNCTION 'COM_PARTNER_MESSAGE_COLLECT_OW'
EXPORTING
is_partner_control = is_partner_control
iv_msgno = '139'
iv_msgid = '/DS1/A'
iv_msgty = 'E'
iv_msgv1 = l_partner.
ELSE.
REFRESH lt_msgno.
lw_msgno-sign = 'I'.
lw_msgno-option = 'EQ'.
lw_low-msgid = '/DS1/A'.
lw_low-msgno = '139'.
lw_msgno-low = lw_low.
APPEND lw_msgno TO lt_msgno.
CALL FUNCTION 'CRM_MESSAGES_DELETE'
EXPORTING
IT_R_MSGIDNO = lt_msgno
iv_ref_object = is_partner_wrk-guid.
ENDIF.
ENDIF.
ENDIF.
endmethod.
when I enter a partner with a wrong role, I got the message I have implemented. But the message is appearing 3 times in the errorlog. Can anyone please let me know the reason for this and solution to resolve this.
Regards,
Swetha -
PaintComponent call in the recursive function
Hello,
I would like to drow some points by an function recursive and I have a problem.
I can see "set_list" during the execution of the function but "paintComponent" is shown only ones and after the termination f the function. How can i do that it calls "paintComponent" after all the time it change "set_list" ?
drow d;
function(){
set_list()
function()
public class drow extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 =(Graphics2D) g;
System.out.println("paintComponent");
public void set_list(LinkedList <point> p){
System.out.println("set_list");
Points =p;
super.repaint();
super.revalidate();
}Edited by: 873248 on 26 avr. 2012 09:48
Edited by: 873248 on 26 avr. 2012 12:40Then you're probably calling it fast enough that the repaints get grouped together into a single repaint.
Simple Swing animation example:
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class TestAnimation extends JPanel {
private double pos;
private Timer timer;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int size = 10;
g.fillOval((int) ((getWidth() - size) * pos),
(int) ((getHeight() - size) * pos), size, size);
public void start() {
stop();
timer = new Timer((int) (1000.0 / 24.0),
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
move();
timer.start();
public void move() {
pos = pos + 0.01;
if(pos >= 1.0) {
pos = 0;
repaint();
public void stop() {
if(timer != null) {
timer.stop();
timer = null;
@Override
public void addNotify() {
super.addNotify();
start();
@Override
public void removeNotify() {
super.removeNotify();
stop();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new TestAnimation());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} -
Interactive Report using a View with a Pipelined Function
Hello fellow Apex people,
I'm Using Application Express 4.1.0.00.32
I've got an interactive report that references a view (STOCK) and a pipelined function
The basic query is listed below.
SELECT S.CHANGED_TIME "Changed Time"
, S.CHANGED_BY "Changed By"
, S.ID "Id"
, STKST_DESCRS.STOCK_STATUS_CODES "Stock Status Codes"
, STKST_DESCRS.STOCK_STATUS_DESCRS "Stock Status"
, S.ORIGINAL_CONTAINER "Original Container"
FROM STOCK S
, table(LWS_StkstStatus (S.ID)) STKST_DESCRS
ORDER BY S.CO_ID,
S.SEQUENCE_NUM;
When the page is first run all the data is displayed correctly,
If I define a filter, sort or a blank search the data from the pipelined function (STKST_DESCRS.) becomes null and isn't displayed.
Does anyone know what is happening?
Many ThanksI'm curious why you find this dangerous. I want a report that looks like this:
Opportunity X:
4 - 2-apr-2008 - Closed deal
3 - 1-mar-2008 - Called Joe again
2 - 12-feb-2008 - Called Joe
1 - 14-jan-2008 - Initial call with customer.
When you enter a new note, I want it to be numbered 5. The only problem I can imagine is someone deleting a note, which will almost never happen, and if it does, it just leaves a numbering gap. I don't see how using the function in a SELECT will accomplish this. -
Tuning a procedure and using dbms_job.submit proc that call's functions
Hi
I have Procedure that have 3 curosrs which are nested one below with in each other
and it looks as below
it's structure will look some thing look like this
declare
empno_fetch number;
CURSOR deu_process IS
SELECT empno
FROM emp
WHERE flg_process = 'N'
AND ROWNUM <= 5000
ORDER BY empno;
CURSOR dup_all IS --c1 fetch around 400000 records
(select empno
from emp
where empno>l_empno
order by empno
where rownum<=empno_fetch;
CURSOR rules IS --c2
SELECT rule_id, rule_score, name_Of_func
FROM rule;
begin
l_count := 1;
OPEN dedupe_rule_attr;
LOOP
BEGIN
Here one loop is used for fetching 5000 records at time and
Here deu_process cursor is opened ,assume it fetches one record
Here another cursor dup_all is used for fetching the records and assume it fetched 400000 then
Here another cursor is opened name where it fetches 10 rows
Here logic is if first row then
call's stored function which has following functionalty
it compares fields such as address of outer most cursor i.e deu_process with all the address of the other rows i.e 400000 rows and return a number
if second row then
call's another stored function which has
compares other fields such as first name,last name
if third then other field
so on ....
up to 10
and then finally ends
so if i comment all the rules loop then it takes only one min to execute .If it validaes all of them if takes 14 minutes to execute .so there is problem in that 10 procedures to execute
So i found an approach to run all the rules simultaneously using dbms_job .But i face a problem that i can't uderstand how to send the input and out put parameter's to calling procedure.And these parameter's must be passed by variable from called procedure to calling procedure
Please suggest me what is the syntax of dbms_job with input and output parameters with variable's that must be passed as formal parameter's
Regarding DBMS_JOB.SUBMIT I am getting following error
Declare
x number:=1;
b number;
jobnumber number;
BEGIN
DBMS_JOB.SUBMIT(JOB => jobnumber,
WHAT => 'vamsi_proc1('||x||');',
NEXT_DATE => (sysdate+1/(86400)),
INTERVAL => null);
--dbms_output.put_line('value of b is '||b);
COMMIT;
END;
Declare
ERROR at line 1:
ORA-06550: line 1, column 107:
PLS-00103: Encountered the symbol ")" when expecting one of the following:
( - + case mod new not null others <an identifier>
<a double-quoted delimited-identifier> <a bind variable> avg
count current exists max min prior sql stddev sum variance
execute forall merge time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
The symbol "null" was substituted for ")" to continue.
ORA-06512: at "SYS.DBMS_JOB", line 79
ORA-06512: at "SYS.DBMS_JOB", line 136
ORA-06512: at line 5
create or replace procedure vamsi_proc1(v in out number) as
x number(4);
begin
--a:=1;
insert into emp_vamsi(select 677,ENAME,SAL,DEPTNO,MANAGER from emp where empno=v);
commit;
--a:=2;
--x:=a;
end;
using dbms_job.submit proc that call's functions which returns out and in parameters to calling procedure environment .I can't get this with out using data base table's.
If you have any method for this Plese suggest
And also please suggest me weather using job's is a good idea ,If not than suggest me what ever will the other approach.
Thank's and Regard's
vamsi krishnaHi <br>
I have looked at all sql trace file ,<br>
I found that there is no problem in sql statemens all of them are using proper <br>indexes execpt the folllowing statement<br>
<br>
SELECT nvl(COUNT(ref_appln_no),0)<br>
FROM ci_cust_dedupe_mast<br>
WHERE flg_mnt_status='A'<br>
<br>
This statement executes only once for 1*3,77000*10 times <br>
The function that i had sent previously executes more than 4000000*20 times .<br>
I think all it takes is only for iterations that are caused<br>
<br>
I am also sending sql trace for reference
<br>
TKPROF: Release 9.2.0.4.0 - Production on Mon Aug 14 17:30:50 2006 <br>
<br>
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. <br>
<br>
Trace file: afhuat_ora_2204.trc <br>
Sort options: default <br>
<br>
******************************************************************************** <br>
count = number of times OCI procedure was executed <br>
cpu = cpu time in seconds executing <br>
elapsed = elapsed time in seconds executing <br>
disk = number of physical reads of buffers from disk <br>
query = number of buffers gotten for consistent read <br>
current = number of buffers gotten in current mode (usually for update) <br>
rows = number of rows processed by the fetch or execute call <br>
******************************************************************************** <br>
<br>
alter session set sql_trace=true <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 0 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 0 0.00 0.00 0 0 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 1 0.00 0.00 0 0 0 0 <br>
<br>
Misses in library cache during parse: 0 <br>
Misses in library cache during execute: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 <br>
******************************************************************************** <br>
<br>
declare <br>
x varchar2(100); <br>
y varchar2(100); <br>
ap number; <br>
begin <br>
x:=to_char(sysdate,'dd-mon-rrrr hh:mi:ss'); <br>
ap:=ap_ci_dedupe_proc; <br>
y:=to_char(sysdate,'dd-mon-rrrr hh:mi:ss'); <br>
dbms_output.put_line(x||' '||ap); <br>
dbms_output.put_line(y||' '||ap); <br>
end; <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 820.23 0 0 0 1 <br>
Fetch 0 0.00 0.00 0 0 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 2 0.00 820.23 0 0 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 <br>
******************************************************************************** <br>
<br>
select user# <br>
from <br>
sys.user$ where name = 'OUTLN' <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 1 0.00 0.00 0 2 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 3 0.00 0.00 0 2 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
1 TABLE ACCESS BY INDEX ROWID USER$ (cr=2 r=0 w=0 time=31 us) <br>
1 INDEX UNIQUE SCAN I_USER1 (cr=1 r=0 w=0 time=18 us)(object id 44) <br>
<br>
******************************************************************************** <br>
<br>
SELECT * <br>
FROM ci_dedupe_rule_attr <br>
ORDER BY cod_rule_attr_id <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.06 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 21 0.00 0.01 1 3 0 20 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 23 0.00 0.07 1 3 0 20 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
SELECT COUNT(1) <br>
FROM ci_cust_dedupe_mast <br>
WHERE flg_process = 'N' <br>
AND <br>
AND <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 1 0.00 0.00 0 22 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 3 0.00 0.00 0 22 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
SELECT nvl(COUNT(ref_appln_no),0) <br>
FROM ci_cust_dedupe_mast <br>
WHERE flg_mnt_status='A' <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 1 1.68 3.03 18867 21183 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 3 1.68 3.03 18867 21183 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
SELECT ref_appln_no <br>
FROM ci_cust_dedupe_mast <br>
WHERE flg_process = 'N' <br>
AND <br>
AND <br>
AND <br>
ORDER BY ref_appln_no <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 2 0.00 0.00 0 0 0 0 <br>
Fetch 3 0.00 0.09 18 43 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 6 0.00 0.09 18 43 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
SELECT <br>
FROM <br>
WHERE <br>
AND <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 377709 8.71 7.64 0 0 0 0 <br>
Fetch 377709 18.18 60.19 19802 1510836 0 377709 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 755419 26.90 67.84 19802 1510836 0 377709 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
SELECT NVL(MAX(cod_serial_no),0) + 1 <br>
FROM ci_dedupe_details_mast <br>
WHERE ref_appln_no = :b1 <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 1 0.00 0.01 2 2 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 3 0.00 0.01 2 2 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
SELECT COUNT(1) <br>
FROM ci_dedupe_details_mast <br>
WHERE ref_appln_no = :b1 <br>
AND <br>
AND flg_mnt_status = 'A' <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 1 0.00 0.00 0 3 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 3 0.00 0.00 0 3 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
SELECT ref_appln_no FROM <br>
( <br>
SELECT ref_appln_no <br>
FROM ci_cust_dedupe_mast <br>
WHERE <br>
AND <br>
ORDER BY ref_appln_no <br>
) <br>
WHERE ROWNUM <= :b2 <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 77 0.01 0.00 0 0 0 0 <br>
Fetch 377786 10.21 12.33 908 377865 0 377709 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 377864 10.23 12.33 908 377865 0 377709 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
SELECT cod_rule_id, cod_rule_score, nam_rule_func <br>
FROM ci_dedupe_rule_defn <br>
WHERE flg_valid = 'Y' <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 377708 5.50 4.03 0 0 0 0 <br>
Fetch 4154788 62.79 54.04 16 4532496 0 3777080 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 4532497 68.29 58.07 16 4532496 0 3777080 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
select con#,obj#,rcon#,enabled,nvl(defer,0) <br>
from <br>
cdef$ where robj#=:1 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 2 0.00 0.00 0 0 0 0 <br>
Execute 2 0.00 0.00 0 0 0 0 <br>
Fetch 2 0.00 0.01 1 2 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 6 0.00 0.01 1 2 0 0 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
******************************************************************************** <br>
<br>
select con#,type#,condlength,intcols,robj#,rcon#,match#,refact,nvl(enabled,0), <br>
rowid,cols,nvl(defer,0),mtime,nvl(spare1,0) <br>
from <br>
cdef$ where obj#=:1 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 2 0.00 0.00 0 0 0 0 <br>
Execute 2 0.00 0.00 0 0 0 0 <br>
Fetch 2 0.00 0.01 2 4 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 6 0.00 0.01 2 4 0 0 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
******************************************************************************** <br>
<br>
select u.name,o.name, t.update$, t.insert$, t.delete$, t.enabled <br>
from <br>
obj$ o,user$ u,trigger$ t where t.baseobject=:1 and t.obj#=o.obj# and <br>
o.owner#=u.user# order by o.obj# <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 3 0.00 0.00 0 0 0 0 <br>
Execute 3 0.00 0.00 0 0 0 0 <br>
Fetch 4 0.00 0.05 6 9 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 10 0.00 0.05 6 9 0 1 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
0 SORT ORDER BY (cr=1 r=1 w=0 time=4772 us) <br>
0 NESTED LOOPS (cr=1 r=1 w=0 time=4747 us) <br>
0 NESTED LOOPS (cr=1 r=1 w=0 time=4744 us) <br>
0 TABLE ACCESS BY INDEX ROWID TRIGGER$ (cr=1 r=1 w=0 time=4740 us) <br>
0 INDEX RANGE SCAN I_TRIGGER1 (cr=1 r=1 w=0 time=4736 us)(object id 130) <br>
0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 r=0 w=0 time=0 us) <br>
0 INDEX UNIQUE SCAN I_OBJ1 (cr=0 r=0 w=0 time=0 us)(object id 36) <br>
0 TABLE ACCESS CLUSTER USER$ (cr=0 r=0 w=0 time=0 us) <br>
0 INDEX UNIQUE SCAN I_USER# (cr=0 r=0 w=0 time=0 us)(object id 11) <br>
<br>
******************************************************************************** <br>
<br>
select o.owner#,o.name,o.namespace,o.remoteowner,o.linkname,o.subname, <br>
o.dataobj#,o.flags <br>
from <br>
obj$ o where o.obj#=:1 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 2 0.00 0.00 0 0 0 0 <br>
Execute 3 0.00 0.00 0 0 0 0 <br>
Fetch 3 0.00 0.02 5 9 0 3 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 8 0.00 0.02 5 9 0 3 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 3) <br>
******************************************************************************** <br>
<br>
select col#, grantee#, privilege#,max(mod(nvl(option$,0),2)) <br>
from <br>
objauth$ where obj#=:1 and col# is not null group by privilege#, col#, <br>
grantee# order by col#, grantee# <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 3 0.00 0.00 0 0 0 0 <br>
Execute 3 0.00 0.00 0 0 0 0 <br>
Fetch 3 0.00 0.01 2 6 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 9 0.00 0.02 2 6 0 0 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
******************************************************************************** <br>
<br>
INSERT INTO ci_dedupe_details_mast <br>
VALUES <br>
( <br>
:b6, <br>
:b5, <br>
:b4, <br>
:b3, <br>
'Y', <br>
'N', <br>
'', <br>
0, <br>
SYSDATE, <br>
'A', <br>
' ', <br>
:b2, <br>
'SYSTEM', <br>
:b1, <br>
1 <br>
) <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.01 3 3 0 0 <br>
Execute 1 0.00 0.01 4 1 6 1 <br>
Fetch 0 0.00 0.00 0 0 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 2 0.00 0.02 7 4 6 1 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
select obj#,type#,ctime,mtime,stime,status,dataobj#,flags,oid$, spare1, <br>
spare2 <br>
from <br>
obj$ where owner#=:1 and name=:2 and namespace=:3 and remoteowner is null <br>
and linkname is null and subname is null <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 1 0.00 0.01 2 3 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 3 0.00 0.01 2 3 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
******************************************************************************** <br>
<br>
select audit$,options <br>
from <br>
procedure$ where obj#=:1 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 1 0.00 0.01 3 3 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 3 0.00 0.01 3 3 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
1 TABLE ACCESS BY INDEX ROWID PROCEDURE$ (cr=3 r=3 w=0 time=14110 us) <br>
1 INDEX UNIQUE SCAN I_PROCEDURE1 (cr=2 r=2 w=0 time=13871 us)(object id 115) <br>
<br>
******************************************************************************** <br>
<br>
select owner#,name,namespace,remoteowner,linkname,p_timestamp,p_obj#, <br>
d_owner#, nvl(property,0),subname <br>
from <br>
dependency$,obj$ where d_obj#=:1 and p_obj#=obj#(+) order by order# <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 4 0.00 0.07 8 12 0 3 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 6 0.00 0.07 8 12 0 3 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
3 SORT ORDER BY (cr=12 r=8 w=0 time=72867 us) <br>
3 NESTED LOOPS OUTER (cr=12 r=8 w=0 time=72813 us) <br>
3 TABLE ACCESS BY INDEX ROWID DEPENDENCY$ (cr=4 r=4 w=0 time=41297 us) <br>
3 INDEX RANGE SCAN I_DEPENDENCY1 (cr=3 r=3 w=0 time=25897 us)(object id 127) <br>
3 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=8 r=4 w=0 time=31484 us) <br>
3 INDEX UNIQUE SCAN I_OBJ1 (cr=5 r=2 w=0 time=14872 us)(object id 36) <br>
<br>
******************************************************************************** <br>
<br>
select order#,columns,types <br>
from <br>
access$ where d_obj#=:1 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 2 0.00 0.02 3 4 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 4 0.00 0.02 3 4 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
1 TABLE ACCESS BY INDEX ROWID ACCESS$ (cr=4 r=3 w=0 time=27026 us) <br>
1 INDEX RANGE SCAN I_ACCESS1 (cr=3 r=2 w=0 time=21717 us)(object id 129) <br>
<br>
******************************************************************************** <br>
<br>
select /*+ index(idl_sb4$ i_idl_sb41) +*/ piece#,length,piece <br>
from <br>
idl_sb4$ where obj#=:1 and part=:2 and version=:3 order by piece# <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 2 0.00 0.00 0 0 0 0 <br>
Execute 2 0.00 0.00 0 0 0 0 <br>
Fetch 3 0.00 0.02 3 7 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 7 0.00 0.02 3 7 0 1 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
0 TABLE ACCESS BY INDEX ROWID IDL_SB4$ (cr=2 r=2 w=0 time=19830 us) <br>
0 INDEX RANGE SCAN I_IDL_SB41 (cr=2 r=2 w=0 time=19826 us)(object id 123) <br>
<br>
******************************************************************************** <br>
<br>
select /*+ index(idl_ub1$ i_idl_ub11) +*/ piece#,length,piece <br>
from <br>
idl_ub1$ where obj#=:1 and part=:2 and version=:3 order by piece# <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 2 0.00 0.00 0 0 0 0 <br>
Execute 2 0.00 0.00 0 0 0 0 <br>
Fetch 3 0.00 0.03 3 9 0 2 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 7 0.00 0.03 3 9 0 2 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
0 TABLE ACCESS BY INDEX ROWID IDL_UB1$ (cr=2 r=2 w=0 time=21757 us) <br>
0 INDEX RANGE SCAN I_IDL_UB11 (cr=2 r=2 w=0 time=21753 us)(object id 120) <br>
<br>
******************************************************************************** <br>
<br>
select /*+ index(idl_char$ i_idl_char1) +*/ piece#,length,piece <br>
from <br>
idl_char$ where obj#=:1 and part=:2 and version=:3 order by piece# <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 2 0.00 0.00 0 0 0 0 <br>
Execute 2 0.00 0.00 0 0 0 0 <br>
Fetch 2 0.00 0.01 2 4 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 6 0.00 0.01 2 4 0 0 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
0 TABLE ACCESS BY INDEX ROWID IDL_CHAR$ (cr=2 r=2 w=0 time=19465 us) <br>
0 INDEX RANGE SCAN I_IDL_CHAR1 (cr=2 r=2 w=0 time=19461 us)(object id 121) <br>
<br>
******************************************************************************** <br>
<br>
select /*+ index(idl_ub2$ i_idl_ub21) +*/ piece#,length,piece <br>
from <br>
idl_ub2$ where obj#=:1 and part=:2 and version=:3 order by piece# <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 2 0.00 0.00 0 0 0 0 <br>
Execute 2 0.00 0.00 0 0 0 0 <br>
Fetch 2 0.00 0.01 2 4 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 6 0.00 0.01 2 4 0 0 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
0 TABLE ACCESS BY INDEX ROWID IDL_UB2$ (cr=2 r=2 w=0 time=15070 us) <br>
0 INDEX RANGE SCAN I_IDL_UB21 (cr=2 r=2 w=0 time=15066 us)(object id 122) <br>
<br>
******************************************************************************** <br>
<br>
select baseobject,type#,update$,insert$,delete$,refnewname,refoldname, <br>
whenclause,definition,enabled,property,sys_evts,nttrigcol,nttrigatt, <br>
refprtname,rowid <br>
from <br>
trigger$ where obj# =:1 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 1 0.00 0.00 1 2 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 3 0.00 0.00 1 2 0 1 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
1 TABLE ACCESS BY INDEX ROWID TRIGGER$ (cr=2 r=1 w=0 time=9352 us) <br>
1 INDEX UNIQUE SCAN I_TRIGGER2 (cr=1 r=1 w=0 time=9340 us)(object id 131) <br>
<br>
******************************************************************************** <br>
<br>
select owner# <br>
from <br>
obj$ o where obj# = :1 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 1 0.00 0.00 0 3 0 1 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 3 0.00 0.00 0 3 0 1 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
1 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=3 r=0 w=0 time=15 us) <br>
1 INDEX UNIQUE SCAN I_OBJ1 (cr=2 r=0 w=0 time=7 us)(object id 36) <br>
<br>
******************************************************************************** <br>
<br>
select tc.type#,tc.intcol#,tc.position#,c.type#, c.length,c.scale, <br>
c.precision#,c.charsetid,c.charsetform <br>
from <br>
triggercol$ tc,col$ c ,trigger$ tr where tc.obj#=:1 and c.obj#=:2 and <br>
tc.intcol#=c.intcol# and tr.obj# = tc.obj# and (bitand(tr.property,32) != <br>
32 or bitand(tc.type#,20) = 20) union select type#,intcol#,position#,69,0,0, <br>
0,0,0 from triggercol$ where obj#=:3 and intcol#=1001 union select tc.type#, <br>
tc.intcol#,tc.position#,121,0,0,0,0,0 from triggercol$ tc,trigger$ tr where <br>
tr.obj# = tc.obj# and bitand(tr.property,32) = 32 and tc.obj# = :4 and <br>
bitand(tc.type#,20) != 20 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 0 <br>
Fetch 34 0.00 0.05 8 236 0 33 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 36 0.00 0.05 8 236 0 33 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
33 SORT UNIQUE (cr=236 r=8 w=0 time=54877 us) <br>
33 UNION-ALL (cr=236 r=8 w=0 time=54606 us) <br>
33 NESTED LOOPS (cr=197 r=8 w=0 time=53779 us) <br>
33 NESTED LOOPS (cr=162 r=8 w=0 time=53053 us) <br>
77 TABLE ACCESS CLUSTER COL$ (cr=83 r=6 w=0 time=40045 us) <br>
1 INDEX UNIQUE SCAN I_OBJ# (cr=2 r=2 w=0 time=13764 us)(object id 3) <br>
33 INDEX RANGE SCAN I_TRIGGERCOL2 (cr=79 r=2 w=0 time=12523 us)(object id 133) <br>
33 TABLE ACCESS BY INDEX ROWID TRIGGER$ (cr=35 r=0 w=0 time=466 us) <br>
33 INDEX UNIQUE SCAN I_TRIGGER2 (cr=2 r=0 w=0 time=152 us)(object id 131) <br>
0 INDEX RANGE SCAN I_TRIGGERCOL2 (cr=2 r=0 w=0 time=5 us)(object id 133) <br>
0 NESTED LOOPS (cr=37 r=0 w=0 time=574 us) <br>
33 INDEX RANGE SCAN I_TRIGGERCOL2 (cr=2 r=0 w=0 time=81 us)(object id 133) <br>
0 TABLE ACCESS BY INDEX ROWID TRIGGER$ (cr=35 r=0 w=0 time=350 us) <br>
33 INDEX UNIQUE SCAN I_TRIGGER2 (cr=2 r=0 w=0 time=139 us)(object id 131) <br>
<br>
******************************************************************************** <br>
<br>
select grantee#,privilege#,nvl(col#,0),max(mod(nvl(option$,0),2)) <br>
from <br>
objauth$ where obj#=:1 group by grantee#,privilege#,nvl(col#,0) order by <br>
grantee# <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 3 0.00 0.00 0 0 0 0 <br>
Execute 3 0.00 0.00 0 0 0 0 <br>
Fetch 3 0.00 0.00 0 6 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 9 0.00 0.00 0 6 0 0 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
******************************************************************************** <br>
<br>
UPDATE <br>
SET <br>
WHERE ref_appln_no = :b1 <br>
AND flg_mnt_status = 'A' <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.16 9 8 17 1 <br>
Fetch 0 0.00 0.00 0 0 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 2 0.00 0.16 9 8 17 1 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
select type#,blocks,extents,minexts,maxexts,extsize,extpct,user#,iniexts, <br>
NVL(lists,65535),NVL(groups,65535),cachehint,hwmincr, NVL(spare1,0) <br>
from <br>
seg$ where ts#=:1 and file#=:2 and block#=:3 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 3 0.00 0.00 0 0 0 0 <br>
Execute 3 0.00 0.00 0 0 0 0 <br>
Fetch 3 0.00 0.01 3 9 0 3 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 9 0.00 0.01 3 9 0 3 <br>
<br>
Misses in library cache during parse: 0 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: SYS (recursive depth: 2) <br>
<br>
Rows Row Source Operation <br>
------- --------------------------------------------------- <br>
1 TABLE ACCESS CLUSTER SEG$ (cr=3 r=3 w=0 time=17332 us) <br>
1 INDEX UNIQUE SCAN I_FILE#_BLOCK# (cr=2 r=2 w=0 time=10258 us)(object id 9) <br>
<br>
******************************************************************************** <br>
<br>
INSERT INTO ci_dedupe_details <br>
VALUES <br>
( <br>
:b31, <br>
:b32, <br>
:b31, <br>
:b30, <br>
:b29, <br>
:b28, <br>
:b27, <br>
:b26, <br>
:b25, <br>
:b24, <br>
:b23, <br>
:b22, <br>
:b21, <br>
:b20, <br>
:b19, <br>
:b18, <br>
:b17, <br>
:b16, <br>
:b15, <br>
:b14, <br>
:b13, <br>
:b12, <br>
:b11, <br>
:b10, <br>
:b9, <br>
:b8, <br>
:b7, <br>
:b6, <br>
:b5, <br>
:b4, <br>
:b3, <br>
:b2, <br>
:b1, <br>
'N', <br>
0, <br>
'E' ) <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.01 0.03 4 1 5 1 <br>
Fetch 0 0.00 0.00 0 0 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 2 0.01 0.03 4 1 5 1 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt, timestamp#, <br>
sample_size, minimum, maximum, distcnt, lowval, hival, density, col#, <br>
spare1, spare2, avgcln <br>
from <br>
hist_head$ where obj#=:1 and intcol#=:2 <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 36 0.00 0.00 0 0 0 0 <br>
Fetch 36 0.00 0.02 3 108 0 36 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 73 0.00 0.02 3 108 0 36 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: RULE <br>
Parsing user id: SYS (recursive depth: 2) <br>
******************************************************************************** <br>
<br>
COMMIT <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 2 0.00 0.00 0 0 0 0 <br>
Execute 2 0.00 0.01 0 0 1 0 <br>
Fetch 0 0.00 0.00 0 0 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 4 0.00 0.01 0 0 1 0 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 (recursive depth: 1) <br>
******************************************************************************** <br>
<br>
BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END; <br>
<br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 1 0.00 0.00 0 0 0 0 <br>
Execute 1 0.00 0.00 0 0 0 1 <br>
Fetch 0 0.00 0.00 0 0 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 2 0.00 0.00 0 0 0 1 <br>
<br>
Misses in library cache during parse: 1 <br>
Optimizer goal: CHOOSE <br>
Parsing user id: 61 <br>
<br>
<br>
<br>
******************************************************************************** <br>
<br>
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 2 0.00 0.00 0 0 0 0 <br>
Execute 3 0.00 820.23 0 0 0 2 <br>
Fetch 0 0.00 0.00 0 0 0 0 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 5 0.00 820.23 0 0 0 2 <br>
<br>
Misses in library cache during parse: 1 <br>
Misses in library cache during execute: 1 <br>
<br>
<br>
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS <br>
<br>
call count cpu elapsed disk query current rows <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
Parse 49 0.00 0.10 3 3 0 0 <br>
Execute 755577 14.25 11.90 17 10 29 3 <br>
Fetch 4910422 92.89 130.18 39671 6442895 0 4532611 <br>
------- ------ -------- ---------- ---------- ---------- ---------- ---------- <br>
total 5666048 107.14 142.19 39691 6442908 29 4532614 <br>
<br>
Misses in library cache during parse: 11 <br>
<br>
17 user SQL statements in session. <br>
35 internal SQL statements in session. <br>
52 SQL statements in session. <br>
******************************************************************************** <br>
Trace file: afhuat_ora_2204.trc <br>
Trace file compatibility: 9.00.01 <br>
Sort options: default <br>
<br>
1 session in tracefile. <br>
17 user SQL statements in trace file. <br>
35 internal SQL statements in trace file. <br>
52 SQL statements in trace file. <br>
36 unique SQL statements in trace file. <br>
5666466 lines in trace file. <br>
Regards<br>
vamsi krishna<br> -
SQL query slow with call to function
I have a SQL query that will return in less than a second or two with a function in-line selected in the "from" clause of the statement. As soon as I select that returned value in the SQL statement, the statement takes from anywhere from 2 to 5 minutes to return. Here is a simplified sample from the statement:
This statement returns in a second or 2.
select A.pk_id
from stu_schedule A, stu_school B, stu_year C, school_year D,
(select calc_ytd_class_abs2(Z.PK_ID,'U') ytd_unx
from stu_schedule Z) II
where B.pk_id = A.fk_stu_school
and C.pk_id = B.fk_stu_year
and D.pk_id = C.year
and D.school_year = '2011';
if I add this function call in, the statement runs extremely poor.
select A.pk_id,
II.ytd_unx
from stu_schedule A, stu_school B, stu_year C, school_year D,
(select calc_ytd_class_abs2(Z.PK_ID,'U') ytd_unx
from stu_schedule Z) II
where B.pk_id = A.fk_stu_school
and C.pk_id = B.fk_stu_year
and D.pk_id = C.year
and D.school_year = '2011';
Here is the function that is called:
create or replace FUNCTION calc_ytd_class_abs2 (p_fk_stu_schedule in varchar2,
p_legality in varchar2) return number IS
l_days_absent number := 0;
CURSOR get_class_abs IS
select (select nvl(max(D.days_absent),'0')
from cut_code D
where D.pk_id = C.fk_cut_code
and (D.legality = p_legality
or p_legality = '%')) days_absent
from stu_schedule_detail B, stu_class_attendance C
where B.fk_stu_schedule = p_fk_stu_schedule
and C.fk_stu_schedule_detail = B.pk_id;
BEGIN
FOR x in get_class_abs LOOP
l_days_absent := l_days_absent + x.days_absent;
END LOOP;
return (l_days_absent);
END calc_ytd_class_abs2;Query returns anywhere from 6000 to 32000 rows. For each of those rows a parameter is passed in to 4 different functions to get ytd totals. When I call the functions in the in-line view but do not select from them in the main SQL, the report (oh, this is Application Express 4.0 interactive reports, just an FYI) runs fast. The report comes back in a few seconds. But when I select from the in-line view to display those ytd totals, the report runs extremely slow. I know there are the articles about context switching and how mixing SQL with PL/SQL performs poorly. So I tried a pipeline table function where the function for the ytd totals populate the columns of the pipeline table and I select from the pipeline table in the SQL query in the interactive report. That seemed to perform a little worse from what I can tell.
Thanks for any help you can offer. -
ORA-22905 with pipelined function
Hi,
I have a strange behaviour that I do not understand.
The code below does not work. It gives me the following errors:
ORA-22905: cannot access rows from a non-nested table item
ORA-06512: at line 10
ORA-06512: at line 19
The problem comes from the line 14 in that function
adm_usergroup.GET_GROUPIDS (userid_in)
If I replace the variable userid_in by its values then it perfectly works.
Can someone give me an explanation ?
The adm_usergroup.GET_GROUPIDS (userid_in) is a pipelined function that querry a group of tables and return IDs which are number.
A call to the function works fine as using it directly in a select statement.
Cheers,
Sebastien
1 DECLARE
2 l_groups AUTH_TYPE.GROUP_RT;
3 l_groups_rec authgroup%ROWTYPE;
4
5 FUNCTION GET_GROUPS (userid_in IN AUTHUSER.USERID%TYPE)
6 RETURN AUTH_TYPE.GROUP_RT
7 IS
8 l_groups_rt AUTH_TYPE.GROUP_RT;
9 BEGIN
10 OPEN l_groups_rt FOR
11 SELECT ag.*
12 FROM authgroup ag
13 WHERE AG.GROUPID IN
14 (SELECT * FROM table (adm_usergroup.GET_GROUPIDS (userid_in)));
15
16 RETURN l_groups_rt;
17 END GET_GROUPS;
18 BEGIN
19 l_groups := GET_GROUPS (1);
20
21 LOOP
22 FETCH l_groups INTO l_groups_rec;
23
24 EXIT WHEN l_groups%NOTFOUND;
25 DBMS_OUTPUT.put_line ('ID: ' || l_groups_rec.groupid);
26 END LOOP;
27
28 CLOSE l_groups;
29 END;by the way here is the full code
CREATE OR REPLACE PACKAGE AUTHDB.ADM_USERGROUP
IS
-- get the group and sub-group ids of a given user id
FUNCTION get_groupids (userid_in IN AUTHUSER.USERID%TYPE)
RETURN authgroup_set
PIPELINED;
END;
CREATE OR REPLACE PACKAGE BODY AUTHDB.ADM_USERGROUP
IS
FUNCTION get_groupids (userid_in IN AUTHUSER.USERID%TYPE)
RETURN authgroup_set
PIPELINED
IS
CURSOR group_cur
IS
SELECT mo.groupid
FROM memberof mo
WHERE MO.USERID = userid_in
UNION
SELECT gh.groupid
FROM GROUPHIERARCHY gh
CONNECT BY PRIOR GH.GROUPID = GH.PARENTGROUP_ID
START WITH GH.PARENTGROUP_ID IN (SELECT mo.groupid
FROM memberof mo
WHERE MO.USERID = userid_in);
BEGIN
FOR rec IN group_cur
LOOP
PIPE ROW (authgroup_type (REC.GROUPID));
END LOOP;
END;
END;
CREATE OR REPLACE
TYPE AUTHDB.AUTHGROUP_TYPE AS OBJECT (GROUPID NUMBER (10));
CREATE OR REPLACE
TYPE AUTHGROUP_SET AS TABLE OF authgroup_type;
DECLARE
l_groups AUTH_TYPE.GROUP_RT;
l_groups_rec authgroup%ROWTYPE;
FUNCTION GET_GROUPS (userid_in IN AUTHUSER.USERID%TYPE)
RETURN AUTH_TYPE.GROUP_RT
IS
l_groups_rt AUTH_TYPE.GROUP_RT;
BEGIN
OPEN l_groups_rt FOR
SELECT ag.*
FROM authgroup ag
WHERE AG.GROUPID IN
(SELECT * FROM table (cast(adm_usergroup.GET_GROUPIDS (userid_in) as authgroup_set)));
RETURN l_groups_rt;
END GET_GROUPS;
BEGIN
l_groups := GET_GROUPS (1);
LOOP
FETCH l_groups INTO l_groups_rec;
EXIT WHEN l_groups%NOTFOUND;
DBMS_OUTPUT.put_line ('ID: ' || l_groups_rec.groupid);
END LOOP;
CLOSE l_groups;
END; -
Call the Function against a select query in 500 procedures...
Hello Gurus,
I have a scenario, where i had made one function(UDF Function) to calculate something and in every procedure i call that function and calculate my requirement.
Yesterday, i made a select query using reg exp for the same calculation..
So my question is, what should be the proper approach..
I need to implement this on 500 procedures...
And the UDF function is
CREATE OR REPLACE FUNCTION "UDF_TEXTSPLIT" (
p_list VARCHAR2,
p_del VARCHAR2 := ','
) RETURN split_tbl pipelined
IS
l_idx PLS_INTEGER;
l_list VARCHAR2(7999) ;
l_value VARCHAR2(7999);
BEGIN
l_list := p_list;
LOOP
l_idx := INSTR(l_list,p_del);
IF l_idx > 0 THEN
pipe ROW(SUBSTR(l_list,1,l_idx-1));
l_list := SUBSTR(l_list,l_idx+LENGTH(p_del));
ELSE
pipe ROW(l_list);
EXIT;
END IF;
END LOOP;
RETURN;
END Udf_Textsplit;
I have made this query:
SELECT a.b,z. b1 FROM
(SELECT ROWNUM d,REGEXP_SUBSTR(str1, '[^> ]+', 1, LEVEL) b
FROM (SELECT 'xxx>zzz>gg' str1 FROM dual)
CONNECT BY REGEXP_SUBSTR(str1, '[^> ]+', 1, LEVEL) IS NOT NULL)a,
(SELECT ROWNUM d,REGEXP_SUBSTR(str1, '[^> ]+', 1, LEVEL) b1
FROM (SELECT '100>500>20' str1 FROM dual)
CONNECT BY REGEXP_SUBSTR(str1, '[^> ]+', 1, LEVEL) IS NOT NULL)z
WHERE a.d=z.d
Do i use the same select query in all 500 procedures or call the (UDF Function) in every procedure..
So which will be faster...
Your approach would be very much appreciated...
Thanks,
Haraprasad...Hmm, do I edit 500 procedures to replace a function call with a SQL statement, or edit 1 function to use a sql statement instead of the current algorithm?
This is why we use code modules that do one thing and do it well. As long as the new version of the function takes the same arguments and returns the same results as the old, then the callers will never know that the way the function works has changed.
Whenther you put the select statement in 500 procedures, or 1 function, there will still be a context switch every time you use it. The tiny additional overhead of calling a function before the context switch would be unnoticeable.
John -
Calling oracle function from Access passthrough query does not return list
Thanks to the help I received in an earlier post I've created an oracle 10g function that returns a list after executing the sql it contains. It works in oracle, using sql developer.
I need to have the list that it returns show up in MS Access via a passthrough query. It's not working so far. The connection string etc is ok, I'm able to use passthrough queries to run sql strings successfully. But when I try to call the function via the Access passthrough query at first nothing seems to happen (ie no list appears) and if I try to run it again, there is a odbc error 'call in progress. Current operation canceled'. There are only the three records in the table. I'm missing something, can anyone spot it?
The passthrough query looks like this
select * from fn_testvalues from dual
Again that runs in oracle.
To create the testing table and 2 functions see below.
CREATE TABLE t_values (MyValue varchar2(10));
Table created
INSERT INTO t_values (
SELECT 'Merced' c1 FROM dual UNION ALL
SELECT 'Pixie' FROM dual UNION ALL
SELECT '452' FROM dual);
3 rows inserted
CREATE OR REPLACE FUNCTION fn_isnum(p_val VARCHAR2) RETURN NUMBER IS
n_val NUMBER;
BEGIN
n_val := to_number(p_val);
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
Function created
testing the table:
SELECT val, fn_isnum(MyValue ) isnum
FROM t_values;
VAL ISNUM
Merced 0
Pixie 0
452 1
Now the function that is called in the passthrough query:
create or replace function fn_testvalues
return sys_refcursor is
rc sys_refcursor;
begin
open rc for
Select t_values.*, fn_isnum(MyValue) IsNum from t_values;
return(rc);
end fn_testvalues;lecaro wrote:
OK. But obviously there is some oracle object that one can call via an Access pass-through query which returns rows?Just to clarify. You could fetch data in Access from an Oracle function that returns a ref cursor using VBA editor. To use a pass-through query Oracle function should be a table function or pipelined table function:
CREATE OR REPLACE
TYPE testvalues_obj_type
AS OBJECT(
val varchar2(10),
isnum number
CREATE OR REPLACE
TYPE testvalues_tbl_type
AS TABLE OF testvalues_obj_type
CREATE OR REPLACE
FUNCTION fn_testvalues
RETURN testvalues_tbl_type
PIPELINED
IS
CURSOR testvalues_cur
IS
SELECT testvalues_obj_type(MyValue,fn_isnum(MyValue)) testvalues_obj
FROM t_values;
BEGIN
FOR v_rec IN testvalues_cur LOOP
PIPE ROW(v_rec.testvalues_obj);
END LOOP;
RETURN;
END;
/To test it in Oracle:
SELECT *
FROM TABLE(fn_testvalues)
VAL ISNUM
Merced 0
Pixie 0
452 1
SQL> Now in Access pass-trough query window enter:
SELECT *
FROM TABLE(fn_testvalues);SY. -
Pipelined Function with execute immediate
Hello Experts,
I have created a Pipe lined function with execute immediate, due to below requirement;
1) Columns in where clause is passed dynamically.
2) I want to know the data stored into above dynamic columns.
3) I want to use it in report, so I don't want to insert it into a table.
I have created a TYPE, then through execute immediate i have got the query and result of that query will be stored in TYPE.
But when calling the function i am getting
ORA-00932: inconsistent datatypes: expected - got -
Below is my function and type, let me know i am going wrong, and is my logic correct.
CREATE OR REPLACE TYPE OBJ_FPD AS OBJECT
(LOW_PLAN_NO VARCHAR2 (40),
FPD VARCHAR2 (5),
SERIAL_NO NUMBER,
CEDIA_CODE VARCHAR2 (2),
DT DATE);
CREATE OR REPLACE TYPE FPD_TBL_TYPE AS TABLE OF OBJ_FPD;
CREATE OR REPLACE FUNCTION FUNC_GET_FPD_DATE (P_LOW_PLAN_NO VARCHAR2,
P_CEDIA_CODE VARCHAR2,
P_SERIAL_NO NUMBER)
RETURN FPD_TBL_TYPE
PIPELINED
AS
CURSOR C1
IS
SELECT 'FPD' || LEVEL TBL_COL
FROM DUAL
CONNECT BY LEVEL <= 31;
V_STR VARCHAR2 (5000);
V_TBL_TYPE FPD_TBL_TYPE;
BEGIN
FOR X IN C1
LOOP
V_STR :=
'SELECT A.low_PLAN_NO,
A.FPD,
A.SERIAL_NO,
A.cedia_code,
TO_DATE (
SUBSTR (FPD, 4, 5)
|| ''/''
|| TO_CHAR (C.low_PLAN_PERIOD_FROM, ''MM'')
|| ''/''
|| TO_CHAR (C.low_PLAN_PERIOD_FROM, ''RRRR''),
''DD/MM/RRRR'')
DT FROM ( SELECT low_PLAN_NO, '
|| ''''
|| X.TBL_COL
|| ''''
|| ' FPD, '
|| X.TBL_COL
|| ' SPTS, SERIAL_NO, cedia_code FROM M_low_PLAN_DETAILS WHERE NVL('
|| X.TBL_COL
|| ',0) > 0 AND SERIAL_NO = '
|| P_SERIAL_NO
|| ' AND cedia_code = '
|| ''''
|| P_CEDIA_CODE
|| ''''
|| ' AND low_PLAN_NO = '
|| ''''
|| P_LOW_PLAN_NO
|| ''''
|| ') A,
M_low_PLAN_DETAILS B,
M_low_PLAN_MSTR C
WHERE A.low_PLAN_NO = B.low_PLAN_NO
AND A.cedia_code = B.cedia_code
AND A.SERIAL_NO = B.SERIAL_NO
AND B.low_PLAN_NO = C.low_PLAN_NO
AND B.CLIENT_CODE = C.CLIENT_CODE
AND B.VARIANT_CODE = C.VARIANT_CODE
CONNECT BY LEVEL <= SPTS';
EXECUTE IMMEDIATE V_STR INTO V_TBL_TYPE;
FOR I IN 1 .. V_TBL_TYPE.COUNT
LOOP
PIPE ROW (OBJ_FPD (V_TBL_TYPE (I).LOW_PLAN_NO,
V_TBL_TYPE (I).FPD,
V_TBL_TYPE (I).SERIAL_NO,
V_TBL_TYPE (I).CEDIA_CODE,
V_TBL_TYPE (I).DT));
END LOOP;
END LOOP;
RETURN;
EXCEPTION
WHEN OTHERS
THEN
RAISE_APPLICATION_ERROR (-20000, SQLCODE || ' ' || SQLERRM);
RAISE;
END;Waiting for your views.
Regards,Ora Ash wrote:
Hello Experts,
I have created a Pipe lined function with execute immediate, due to below requirement;
1) Columns in where clause is passed dynamically.No, that's something you've introduced, and is due to poor database design. You appear to have columns on your table called FPD1, FPD2 ... FPD31. The columns do not need to be 'passed dynamically'
2) I want to know the data stored into above dynamic columns.And you can know the data without it being dynamic.
3) I want to use it in report, so I don't want to insert it into a table.That's fine, though there's no reason to use a pipelined function.
You also have an pointless exception handler, which masks any real errors.
I'm not quite sure what the point of your "connect by" is in your query as we don't have your tables or data or know for sure what the expected output is.
However, in terms of handling the 'dynamic' part that you've introduced, then you would be looking at doing something along the following lines, using a static query that requires no poor dynamic code, and no pipelined function...
with x as (select level as dy from dual connect by level <= 31)
select a.low_plan_no
,a.fpd
,a.serial_no
,a.cedia_code
,trunc(c.low_plan_period_from)+a.dy-1 as dt
from (select low_plan_no
,dy
,'FPD'||dy as fpd
,spts
,serial_no
,cedia_code
from (
select low_plan_no
,x.dy
,case x.dy when 1 then fpd1
when 2 then fpd2
when 3 then fpd3
when 4 then fpd4
when 5 then fpd5
when 6 then fpd6
when 7 then fpd7
when 8 then fpd8
when 9 then fpd9
when 10 then fpd10
when 11 then fpd11
when 12 then fpd12
when 13 then fpd13
when 14 then fpd14
when 15 then fpd15
when 16 then fpd16
when 17 then fpd17
when 18 then fpd18
when 19 then fpd19
when 20 then fpd20
when 21 then fpd21
when 22 then fpd22
when 23 then fpd23
when 24 then fpd24
when 25 then fpd25
when 26 then fpd26
when 27 then fpd27
when 28 then fpd28
when 29 then fpd29
when 30 then fpd30
when 31 then fpd31
else null
end as spts
,serial_no
,cedia_code
from x cross join m_low_plan_details
where serial_no = p_serial_no
and cedia_code = p_cedia_code
and low_plan_no = p_low_plan_no
where nvl(spts,0) > 0
) A
join m_low_plan_details B on ( A.low_plan_no = B.low_plan_no
and A.cedia_code = B.cedia_code
and A.serial_no = B.serial_no
join m_low_plan_mstr C on ( B.low_plan_no = C.low_plan_no
and B.client_code = C.client_code
and B.variant_code = C.variant_code
connect by level <= spts;... so just remind us again why you think it needs to be dynamic? -
What exactly is parallelised in pipelined functions?
Hi All,
I have a slight confusion about pipelined table functions, which are parallelised (with PARALLEL_ENABLE clause).
Everywhere on the internet/documents it is mentioned that, we can use PARALLEL_ENABLE with pipelined table functions, I am not clear about exactly how this will work?
For example, I have a pipelines function, which is called by C# code to write data in file ( Oracle v11.2 on Linux 64bit). Function looks something like
FUNCTION extract_data (param1..., param2...., param3.... )
RETURN data_tab /* this data_tab is table of record type data_rec */
PIPELINED
IS
v_data_rec data_rec := data_rec ( null, null,....., null);
BEGIN
FOR i_rec IN ( select col1, col2, col3,.... FROM table1, table2 WHERE <all typical stuff here> )
LOOP
v_data_rec.col1 := i_rec.col1 ;
v_data_rec.col2 := i_rec.col2 ;
v_data_rec.col3 := i_rec.col3 ;
if v_data_rec.col1 = 'A' then
select col into v_data_rec.col4 from tablex where .... ;
elsif v_data_rec.col1 = 'B' then
select col into v_data_rec.col4 from tabley where .... ;
elsif v_data_rec.col1 = 'C' then
select col into v_data_rec.col4 from tablez where .... ;
elsif v_data_rec.col1 = 'D' then
select col into v_data_rec.col4 from tablet where .... ;
end if ;
/* some more bits of complex logic here */
PIPE ROW ( v_data_rec ) ;
END LOOP ;
END extract_data ;Now, if I add PARALLEL_ENABLE to my function definition, which bits will be parallelised? will anything be parallelised ?
Thoughts please.
Thanks in advance.i.e. this ( where the query might well be run in parallel, but the result processed serially by the pipelined function):
SQL> explain plan for
2 select *
3 from table(
4 f_serial_pipe
5 (cursor(select /*+ parallel (t1 4) */
6 *
7 from t1)));
Explained.
SQL>
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 1425181138
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 8168 | 1100K| 34 (3)| 00:00:01 |
| 1 | VIEW | | 8168 | 1100K| 34 (3)| 00:00:01 |
| 2 | COLLECTION ITERATOR PICKLER FETCH| F_SERIAL_PIPE | 8168 | | 34 (3)| 00:00:01 |
Note
- dynamic sampling used for this statement (level=4)
13 rows selected.
SQL> is different from thsi:
SQL> explain plan for
2 select *
3 from table(
4 f_parallel_pipe
5 (cursor(select /*+ parallel (t1 4) */
6 *
7 from t1)));
Explained.
SQL>
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 2029647211
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | 8168 | 1100K| 34 (3)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 8168 | 1100K| 34 (3)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | VIEW | | 8168 | 1100K| 34 (3)| 00:00:01 | Q1,00 | PCWP | |
| 4 | COLLECTION ITERATOR PICKLER FETCH| F_PARALLEL_PIPE | 8168 | | 34 (3)| 00:00:01 | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | | 798K| 97M| 2659 (1)| 00:00:02 | Q1,00 | PCWC | |
| 6 | TABLE ACCESS FULL | T1 | 798K| 97M| 2659 (1)| 00:00:02 | Q1,00 | PCWP | |
Note
- dynamic sampling used for this statement (level=4)
17 rows selected.
SQL> -
Record vs object vs globle table in pipelined function
i want to make pipeline function , i show it can be made in following ways
please suggest which one is better in performance and maintenance.
1)
create type my_tab_type is object
(prodid number, a varchar2(1), b varchar2(1),
c varchar2(1), d varchar2(1), e varchar2(1))
create type my_tab_type_coll is table of my_tab_type;
create or replace function get_some_data (p_val in number)
return my_tab_type_coll pipelined is
begin
FOR i in (select * from my_table where prodid=p_val) loop
pipe row(my_tab_type(i.prodid,i.a,i.b,i.c,i.d,i.e));
end loop;
return;
end;
SELECT * FROM table(get_Some_Data(3));
2)
one can create globle tem table "Tlb_3". then can make a package like fllowing
create or replace
PACKAGE pk1
AS
TYPE T_type IS TABLE OF Tlb_3%ROWTYPE;
END;
and rest of the thing will be same like first one.
3)
TYPE outrec_typ IS RECORD (
var_num NUMBER(6),
var_char1 VARCHAR2(30),
var_char2 VARCHAR2(30)
TYPE outrecset IS TABLE OF outrec_typ;
and rest of the thing will be same like first one
so main question is relating to declaretion of TABLE which is returned.
yours sincerely
Edited by: 944768 on Jan 2, 2013 4:23 AMDUPLICATE THREAD!
How many times do you intend to ask this question?
This is the same question that you ask, and got answered, six months ago in this thread?
how to write Function returing table or set of rows.
And you ask it again a week ago in this thread
object vs record in pipelined function.
Have you forgotten those answers already? Why didn't you take the advice given there and perform some tests?
And you don't seem to acknowledge any of the help you get to your questions by marking them ANSWERED when they have been.
Please revisit this 32 questions and mark them ANSWERED as appropriate - Total Questions: 73 (32 unresolved)
>
i want to make pipeline function , i show it can be made in following ways
please suggest which one is better in performance and maintenance.
>
Why didn't you take the advice given there and perform some tests?
Option #1, using SQL types is better, especially for maintenance. Also SQL types are required if the function is going to be called from SQL. You can define PL/SQL or %ROWTYPE package variables and use them but Oracle will silently create 'hidden' (in 11g) SQL types and use those.
See Solomon's explanation and sample code in this recent thread
Re: Pipe line function
There certainly isn't any need to create a global temp table just so you can create the %ROWTYPE variable; you can create one of those based on a CURSOR. -
Pipeline functions - what happens under the hood? (10g)
Hi all,
What happens when you call a pipelined function? (As opposed to a plain table-valued function.)
From what I understand, a pipelined function will return rows as they are needed. Let's say I have a really silly example of a pipelined function,
CREATE OR REPLACE PACKAGE BODY TEST_PACKAGE_1
AS
FUNCTION GET_DATA RETURN JUST_A_TABLE PIPELINED
IS
BEGIN
PIPE ROW (JUST_A_TYPE('HELLO'));
PIPE ROW (JUST_A_TYPE('WORLD'));
RETURN;
END;
END TEST_PACKAGE_1;
/Then let's say I were to SELECT * FROM TABLE(TEST_PACKAGE_1.GET_DATA) WHERE ROWNUM = 1, what happens to the second row? Does the code that returns the second row still get educated? (Obviously it's omitted from the query, but does it still get generated somewhere and just go nowhere?)
If I have a cursor on a PL/SQL block that selects from GET_DATA, will each row only be returned as the cursor references it? In that case, what happens to the rows that don't get selected? If there some resource that need to be closed out (say, just before the return statement), would it still be safe to close it out?
Thanks!
DonInteresting question, lets try a simple test and see we'll just take your example function and toss in a few dbms_output statements like so:
CREATE OR REPLACE PACKAGE BODY TEST_PACKAGE_1
AS
FUNCTION GET_DATA RETURN JUST_A_TABLE PIPELINED
IS
BEGIN
dbms_output.put_line('ONE');
PIPE ROW (JUST_A_TYPE('HELLO'));
dbms_output.put_line('TWO');
PIPE ROW (JUST_A_TYPE('WORLD'));
dbms_output.put_line('THREE');
RETURN;
END;
END TEST_PACKAGE_1;Now not forgetting to enable dbms_output call it three times like so:
SELECT * FROM TABLE(TEST_PACKAGE_1.GET_DATA) WHERE ROWNUM = 1;
SELECT * FROM TABLE(TEST_PACKAGE_1.GET_DATA) WHERE ROWNUM <= 2;
SELECT * FROM TABLE(TEST_PACKAGE_1.GET_DATA) WHERE ROWNUM <= 3;What I saw from my test was that with the first call I got 1 row of data from the pipelined function and only the first dbms_output statement was processed. For the second statement I got 2 rows of data from the function and the first two dbms_output statements were processed. For the final call I again got 2 rows of data from the function and all 3 dbms_output statements were processed.
My environment:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
PL/SQL Release 10.2.0.1.0 - Production
"CORE 10.2.0.1.0 Production"
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
Maybe you are looking for
-
Hi I'm using CS4 DW with all the updates. I can log onto my local mysql database but when I setup for the one on my remote webserver I get the following error MySql Error 2000 mysqlind cannot connect to MYSQL4.1 using old authentication This seems to
-
Calendar Server config in Null directory
I am having problem configuring Sun Calender Server 6.3. I have successfully configured the Mail Server, but the Calendar Server keeps defaulting to the /null directory to install. This makes the process fail. Pls help anyone
-
Users forced to clear cache and cookies after server move
We recently moved our ColdFusion 9 website from one server to a new and improved upgraded spec server. The site works great and the upgrades are a huge improvement. However, since the move last Friday we are being flooded with calls to our helpdesk b
-
When in Bridge iselect image try goto Photoshop then choose Batch it looks like its going to work. Photoshop opens up then halfway through it just stops and will not open. i have tryed Command Option,Shift and nothing looked at the preferances, and
-
What is cellular? And why is it more expensive to get?
What is cellular?