Используя стандартную конструкцию PL / SQL, вы не можете. Вы можете перебрать коллекцию, используя
for i in mycol.FIRST .. mycol.LAST loop
Переменная i - не индекс, а один элемент повторяющейся коллекции.
Если ваш объект - ТИП Oracle, вы можете запросить системное представление ALL_TYPE_ATTRS. Это представление является частью каталога базы данных. Вы найдете его описание в Oracle Reference (не Oracle SQL Reference!). Вы получаете список имен атрибутов, я не уверен, что вы можете получить к нему динамический доступ.
Самый простой способ - написать набор вспомогательных процедур, которые будут проверять атрибут в соответствии с его типом и управлять его значением, а затем просто вызывать эту процедуру.
declare
procedure Manage_Char_Attr(value IN VARCHAR2, pclob CLOB) IS
BEGIN
if value is null then
...
END;
procedure Manage_Number_Attr(value IN NUMBER, pclob CLOB) IS
...
procedure Manage_Date_Attr(value IN DATE, pclob CLOB) IS
...
CLOB myclob
begin
-- initialize your CLOB
...
-- manage attributes
Manage_Char_Attr(attr1, myclob); -- let attr1 is a string
Manage_Char_Attr(attr2, myclob); -- let attr2 is a string
Manage_Numvber_Attr(attr3, myclob); -- let attr3 is a number
Manage_Date_Attr(attr4, myclob); -- let attr4 is a date
...
end;