我有一些PL / SQL代码:
DECLARE
CURSOR c_data IS
SELECT *
FROM table;
TYPE bulk_collect IS TABLE OF c_data%ROWTYPE INDEX BY PLS_INTEGER;
l_tab bulk_collect;
BEGIN
OPEN c_data;
LOOP
FETCH c_data
BULK COLLECT INTO l_tab LIMIT 1000;
EXIT WHEN l_tab.count = 0;
-- Process contents of collection here.
--Insert into tt_kust values l_tab;
FOR indx IN 1 .. l_tab.COUNT
LOOP
DBMS_OUTPUT.PUT_LINE(l_tab(indx).col_name);
END LOOP;
END LOOP;
CLOSE c_data;
END;
这很好用! 但是当我尝试像这样访问'l_tab'的列时:
FOR indx IN 1 .. l_tab.COUNT
LOOP
DBMS_OUTPUT.PUT_LINE(l_tab(indx)['col_name']);
END LOOP;
它不起作用!有没有办法像没有'dot'符号的数组一样访问'l_tab'? 我想这样做是因为我想将这个pl / sql代码用于多个表,所以它必须是动态的。 所以后来在FOR LOOP中我想做这样的事情:
FOR indx IN 1 .. l_tab.COUNT
LOOP
upt_stmt := 'update table set colname= :col1, colname=:col2, ...
where pkcolname = :pkcolname ;
execute immediate upt_stmt using l_tab(indx)['col_name'],l_tab(indx)['col_name2'], ....;
END LOOP;