Да, вы можете использовать dbms_sql.describe_columns
.В этом ответе используется фрагмент кода, заимствованного из здесь
Если вы хотите, вы можете преобразовать его в функцию TABLE
, которая возвращает имена столбцов для любого заданногозапрос, чтобы упростить вещи для вас.Я оставлю это как упражнение для вас!
declare
p_query varchar2(32767) :=
q'{
Select 'Bruce' as "First_Name", 'Thomas'
as "Middle_Name", 'Wayne' as "Last_Name"
From Dual
}';
l_theCursor integer default dbms_sql.open_cursor;
l_descTbl dbms_sql.desc_tab;
l_colCnt number;
begin
dbms_sql.parse( l_theCursor, p_query, dbms_sql.native );
dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl );
for i in 1 .. l_colCnt loop
dbms_output.put_line( l_descTbl(i).col_name );
end loop;
end;
/
Вывод
First_Name
Middle_Name
Last_Name
PL/SQL procedure successfully completed.
DEMO