Ваша функция использует DBMS_OUTPUT.PUT_LINE для отображения ваших результатов. Это печатает сообщение в выходной буфер, за которым следует символ новой строки.
Все, что вам нужно сделать, чтобы получить вывод в одной строке, это использовать PUT () вместо PUT. PUT () печатает вывод, но не печатает перевод строки. Следовательно, каждый вызов PUT () объединяет свой вывод с существующим содержимым строки. Наконец, нам нужно вызвать DBMS_OUTPUT.NEW_LINE (), чтобы напечатать строку.
PUT () очень полезен, когда мы хотим построить наш вывод поэтапно, скажем, в цикле. Объединенный вывод не может превышать указанную длину одной строки (максимально допустимое значение - 32 КБ).
Так что это довольно простое изменение в вашем коде:
create or replace procedure TEMP_ARRAy_RECORD2
is
--type emp_det_tbl IS TABLE OF temp_employee_det%ROWTYPE index by pls_integer;
type lemp_det IS RECORD
(
--l_emp_id int,
l_emp_id temp_employee_det.emp_id%type,
l_city temp_employee_det.city%type,
l_amount temp_employee_det.amount%type
);
TYPE emp_det IS VARRAY(15) OF lemp_det;
f_emp_det emp_det;
BEGIN
for i in (select emp_id,city,amount BULK COLLECT into f_emp_det from temp_employee_det)
loop
dbms_output.put(i.emp_id||'$'||i.city||'$'||i.amount);
exit when SQL%NOTFOUND;
end loop;
dbms_output.new_line;
end;