Вы должны сообщить нам , какие ошибки вы получаете , поскольку, глядя на ваш источник, их потенциально много.
Например, ваш курсор выберет до десяти строк.Однако вы не выполняете цикл, поэтому ваша выборка будет отбрасывать TOO_MANY_ROWS, если в таблице PERSON более одной строки.
Кроме того, вам необходимо явно ссылаться на отдельные элементы курсора, а не на переменную% ROWTYPE..
Кроме того, проекция запроса должна соответствовать переменной, которую вы выбираете (количество столбцов, тип столбцов и т. Д.).Проще использовать синтаксис CURSOR FOR и позволить Oracle справиться с ним за нас.Это также решает проблему TOO_MANY_ROWS.
Поэтому я бы переписал ваш код так:
procedure filehandler as
FID UTL_FILE.FILE_TYPE;
FOLDER_NAME VARCHAR(50) := 'GID_FILE';
FILE_NAME VARCHAR(50) :='bhanu.txt';
begin
FID := UTL_FILE.FOPEN (FOLDER_NAME, FILE_NAME, 'A');
for V_PERSON in ( select personid, personnum,fullnm
from person where rownum<=10 )
loop
DBMS_OUTPUT.PUT_LINE(V_PERSON.personid);
UTL_FILE.PUT_LINE (FID,V_PERSON.personid
||' '||V_PERSON.personnum
||' '||V_PERSON.fullnm);
end loop;
UTL_FILE.FCLOSE (FID);
end test_filehandler;
Открытие и закрытие файла для каждой строки не является неправильным, только медленнее, чем нужно.