By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
/**
* Вывод в виде HTML
*/
DECLARE
l_sql VARCHAR2(32767):='
SELECT 1 field_11, ''river'' field_22 FROM DUAL
UNION ALL
SELECT 1 field_11, ''sharf'' field_22 FROM DUAL
';
l_cur PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
l_ind PLS_INTEGER;
l_col_count PLS_INTEGER;
l_col_names DBMS_SQL.DESC_TAB;
l_out VARCHAR2(32767);
col_val_chr VARCHAR2(32767);
LNBR VARCHAR2(2) := CHR(13)||CHR(10);
col_delim VARCHAR2(20) := '</td><td>';
row_delim VARCHAR2(20) := '</td></tr>'|| LNBR ||'<tr><td>';
BEGIN
-- Разбор запроса
DBMS_SQL.PARSE (
l_cur,
l_sql,
DBMS_SQL.NATIVE
);
-- Получение информации о столбцах
DBMS_SQL.DESCRIBE_COLUMNS (l_cur, l_col_count, l_col_names);
-- Вывод каждого из имен столбцов
FOR col_ind IN 1 .. l_col_count
LOOP
-- Определим тип столбца
DBMS_SQL.DEFINE_COLUMN(l_cur, col_ind, col_val_chr, 32767);
-- Выводим наимнование столбца
l_out := l_out || l_col_names(col_ind).col_name;
-- Если не последний эл. вставляем разделитель
IF col_ind != l_col_count
1 rows affected
dbms_output:
<table>
<tr><td>FIELD_11</td><td>FIELD_22</td></tr>
<tr><td>1</td><td>river</td></tr>
<tr><td>1</td><td>sharf</td></tr>
</table>
/**
* Вывод в виде CSV
*/
DECLARE
l_sql VARCHAR2(32767):='
SELECT 1 field_11, ''river'' field_22 FROM DUAL
UNION ALL
SELECT 1 field_11, ''sharf'' field_22 FROM DUAL
';
l_cur PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
l_ind PLS_INTEGER;
l_col_count PLS_INTEGER;
l_col_names DBMS_SQL.DESC_TAB;
l_out VARCHAR2(32767);
col_val_chr VARCHAR2(32767);
LNBR VARCHAR2(2) := CHR(13)||CHR(10);
col_delim VARCHAR2(20) := ';';
row_delim VARCHAR2(20) := LNBR;
BEGIN
-- Разбор запроса
DBMS_SQL.PARSE (
l_cur,
l_sql,
DBMS_SQL.NATIVE
);
-- Получение информации о столбцах
DBMS_SQL.DESCRIBE_COLUMNS (l_cur, l_col_count, l_col_names);
-- Вывод каждого из имен столбцов
FOR col_ind IN 1 .. l_col_count
LOOP
-- Определим тип столбца
DBMS_SQL.DEFINE_COLUMN(l_cur, col_ind, col_val_chr, 32767);
-- Выводим наимнование столбца
l_out := l_out || l_col_names(col_ind).col_name;
-- Если не последний эл. вставляем разделитель
IF col_ind != l_col_count
1 rows affected
dbms_output:
FIELD_11;FIELD_22
1;river
1;sharf