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 krishna