我在oracle数据库9i中使用plsql
我有一个存储过程,
使用“数字表”的in参数称为数字。
我现在想要从表中选择所有行,其中名为:ID的列等于“数字”内的数字
就像我可以select * from table name where Id in (!,!,!,...)
一样
谢谢您的帮助。
更新:
要清理一下,
我有一个名为numbers的用户定义类型,
数字定义为:数字表。
所以在程序中,我有
“数字P_array”
我需要select * from a table where Id is found in p_array
答案 0 :(得分:2)
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)
答案 1 :(得分:1)
尝试以下方法: -
select * from tableName where id in (select c.column_value from table(cast(p_array as numbers)) c);
其中number是数字表
答案 2 :(得分:0)
SELECT * FROM A_TABLE WHERE ID IN (SELECT SAVED_NUMBERs FROM TABLE_NUMBER);
你是说这个吗?