别名是一个类型的表?

时间:2016-04-17 17:29:24

标签: sql oracle plsql

我对表类型

有以下定义
create table number_table as table of number;

我想在下面的例子中使用它。

declare
  l_myTable number_table := number_table(1, 2, 3);
begin
  for i in (select * from l_myTable) loop
    dbms_output.put_line(i.???); -- how do I reference the numbers here?
  end loop;
end;

原谅我的代码有点无意义,我如何引用i.???来获取迭代器中的数字?

2 个答案:

答案 0 :(得分:1)

稍微将您的查询更改为

select rownum, column_value from l_myTable

然后使用dbms_output.put_line(i.rownum);作为索引,dbms_output.put_line(i.column_value );作为值

答案 1 :(得分:0)

create type number_table as table of number;
/

您不需要使用Cursor FOR LOOP,因为您可以遍历集合:

declare
  l_myTable number_table := number_table(3, 2, 1);
begin
  for i in 1 .. l_myTable.COUNT loop
    dbms_output.put_line( l_myTable(i) );
  end loop;
end;
/

但是,如果有一些原因需要使用游标,那么您可以使用ROWNUM pseudocolumn来获取集合中的索引,并使用COLUMN_VALUE pseudocolumn来获取集合中该索引的值使用查询:

SELECT ROWNUM, COLUMN_VALUE FROM TABLE( l_myTable )

像这样:

declare
  l_myTable number_table := number_table(3, 2, 1);
begin
  for i in ( SELECT ROWNUM, COLUMN_VALUE FROM TABLE( l_myTable ) ) loop
    dbms_output.put_line( i.rownum || ': ' || i.column_value ); -- how do I reference the numbers here?
  end loop;
end;
/