2016-04-17 11 views
1

Ich habe die folgende Definition für einen TabellentypAlias ​​für eine Tabelle des Typs?

create table number_table as table of number; 

Und ich möchte es wie im folgenden Beispiel verwenden.

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; 

Vergib mein Code etwas sinnlos zu sein, wie würde ich die i.??? Referenz obwohl die Zahl aus dem Iterator zu bekommen?

+0

Meinten Sie 'CREATE TABLE' oder' CREATE TYPE'? Ich nehme das spätere an, da die erste ungültige Syntax ist. – MT0

Antwort

1

nur leicht Ihre Anfrage

select rownum, column_value from l_myTable 

ändern und dann dbms_output.put_line(i.rownum); als Index und dbms_output.put_line(i.column_value); als Wert verwenden

0
create type number_table as table of number; 
/

Sie brauchen keine Cursor FOR LOOP zu verwenden, wie Sie gerade über laufen kann die Sammlung:

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; 
/

Jedoch, wenn es gibt ein Grund, warum Sie einen Cursor verwenden müssen, dann können Sie die ROWNUM pseudocolumn verwenden Index innerhalb der Sammlung zu erhalten und die COLUMN_VALUE pseudocolumn den Wert an diesem Index in der Sammlung mit der Abfrage zu erhalten:

SELECT ROWNUM, COLUMN_VALUE FROM TABLE(l_myTable) 

So:

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; 
/
Verwandte Themen