1

我在 oracle 数据库 9i 中使用 plsql 我有一个存储过程,带有一个称为数字的“数字表”的 in 参数。我现在想从表中选择所有行,其中名为:ID 的列等于“数字”中的数字,就像我可以做的一样select * from table name where Id in (!,!,!,...) 感谢您的帮助。

更新:为了澄清,我有一个名为 numbers 的用户定义类型, Number 定义为:数字表。所以在程序 decleration 我有“P_array in numbers”我需要select * from a table where Id is found in p_array

4

3 回答 3

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)
于 2013-01-07T15:23:14.440 回答
1

try the following :-

select * from tableName where id in (select c.column_value from table(cast(p_array as numbers)) c);

where numbers is table of number

于 2013-01-07T14:54:31.950 回答
0
SELECT * FROM A_TABLE WHERE ID IN (SELECT SAVED_NUMBERs FROM TABLE_NUMBER);

你是这个意思吗?

于 2013-01-07T13:51:13.813 回答