2016-04-17 3 views
1

У меня есть следующее определение типа таблицыПсевдоним для таблицы типа?

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.??? хотя, чтобы получить число из итератора?

+0

Вы имели в виду 'CREATE TABLE' или' CREATE TYPE'? Я предполагаю, что позже, поскольку первый является недопустимым синтаксисом. – MT0

ответ

1

Просто немного изменить запрос

select rownum, column_value from l_myTable 

, а затем использовать dbms_output.put_line(i.rownum); в качестве индекса и dbms_output.put_line(i.column_value); в качестве значения

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; 
/
Смежные вопросы