Как отобразить все записи в одной строке - PullRequest
2 голосов
/ 17 октября 2019

Мой запрос

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_line(i.emp_id||'$'||i.city||'$'||i.amount);
exit when SQL%NOTFOUND;
end loop;
end;

Теперь покажите мой вывод

SQL*Plus statement executed
PL/SQL block executed
1$NASHIK$100
1$NASHIK$50
2$PPPPP,KK,JJ$45
2$KKKK,KK,$50
2$KKKK,kk$300
5$PPPPP$15.07
3$PPPPP$15.507
4$NASHIK$122

Но мой ожидаемый вывод

1$NASHIK$1001$NASHIK$502$PPPPP,KK,JJ$452$KKKK,KK,$502$KKKK,kk$3005$PPPPP$15.073$PPPPP$15.504$NASHIK$122

Я пытался использовать Index By Table иVarray но не получить правильный ответ. Пожалуйста, не используйте никакие функции и прочее. Я хочу этот вывод в массиве.

1 Ответ

4 голосов
/ 17 октября 2019

Ваша функция использует 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...