這樣的表?
SQL> create type numbers as table of number;
2/
Type created.
SQL> create table foo (id number) ;
Table created.
SQL> insert into foo select rownum from dual connect by level <= 10;
10 rows created.
SQL> select * from foo;
ID
----------
1
2
3
4
5
6
7
8
9
10
10 rows selected.
SQL> create procedure testnum(p_num in numbers)
2 is
3 begin
4 for r_row in (select id
5 from foo f
6 where f.id in (select /*+ cardinality(t, 10) */ column_value
7 from table(p_num) t))
8 loop
9 dbms_output.put_line(r_row.id);
10 end loop;
11 end;
12/
Procedure created.
SQL> set serverout on
SQL> exec testnum(numbers(2, 6, 9));
2
6
9
基數提示用於告訴oracle大致有多少元素在你的表中。沒有它,Oracle會假設〜8k行,這可能太高,並導致計劃中的不必要的全面掃描。
如果您願意,也可以直接加入。
for r_row in (select /*+ cardinality(t, 10) */ f.id
from foo f
inner join table(p_num) t
on t.column_value = f.id)
我試過「SELECT * FROM atable其中Id的(選擇數saved_numbers)。我得到ORA 04044錯誤 – user1333057
從頭開始,我嘗試 「SELECT * FROM表名其中id中(從myArrayName選擇saved_numbers)」。我得到了一個00942 ora錯誤 – user1333057
等等,所以你有一個包含所有數字的數組?如果是這種情況,請嘗試:SELECT * FROM WHERE ID IN ; –