CARDINALITY hint has an unexpected affect on the join results in Oracle 9.2.0.6:
The very strange behaviour has been detected for the following case:
SQL> desc arrayofnumbers
arrayofnumbers TABLE OF NUMBER(20)
SQL> desc tmp_log
Name Null? Type
----------------------------------------- -------- ----------------------------
LOG VARCHAR2(4000)
SQL> CREATE OR REPLACE
2 PROCEDURE tsp
3 (
4 root in VARCHAR2,
5 to_processes in arrayofnumbers,
6 targetProcesses out arrayofnumbers
7 )
8 AS
9 str varchar2(4000);
10 BEGIN
11
12 targetProcesses := arrayofnumbers();
13
14 str := ' r0='to_processes.COUNT;
15
16 select column_value BULK COLLECT INTO targetProcesses from TABLE(to_processes) p;
17
18 str := str ' r1='targetProcesses.COUNT;
19
20 SELECT /*+ cardinality(p 1 ) */ process_id BULK COLLECT INTO targetProcesses
21 FROM glob_data i, TABLE(to_processes) p
22 WHERE waiting=1 AND root = tsp.root AND i.process_id=p.column_value;
23
24 str := str ' r2='targetProcesses.COUNT;
25
26 INSERT INTO tmp_log(log)
27 VALUES ( str);
28
29
30 END;
31 /
Procedure created.
SQL> declare
2 targetProcesses arrayofnumbers := arrayofnumbers();
3 tP arrayofnumbers;
4 l_root varchar2(100) := 'ASF_MM_ActionCompleted';
5 begin
6
7 select process_id bulk collect into tP from glob_data
8 where waiting=1 AND root = l_root;
9
10 for i in 1..10 loop
11 tsp ( l_root, tP, targetProcesses);
12 commit;
13 end loop;
14
15 end;
16 /
PL/SQL procedure successfully completed.
SQL> select * from (select * from tmp_log order by 1 desc) where rownum <=10;
LOG --------------------------------------------------------------------------------
r0=1260 r1=1260 r2=1260
r0=1260 r1=1260 r2=1260
r0=1260 r1=1260 r2=1260
r0=1260 r1=1260 r2=1260
r0=1260 r1=1260 r2=1260
r0=1260 r1=1260 r2=1236
r0=1260 r1=1260 r2=1236
r0=1260 r1=1260 r2=1236
r0=1260 r1=1260 r2=1236
r0=1260 r1=1260 r2=1236
10 rows selected.
The only one user session existed in Oracle at that moment.
This effect has been revealed then new connection is opening in Oracle.
After the first execution of the block the effect can't be revealed.
Thursday, February 8, 2007
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment