Nie musisz wykonywać zapytania, aby uzyskać nazwy kolumn, wystarczy je przeanalizować; np. jako prosty przykład:
set serveroutput on
declare
l_statement varchar2(4000) := 'select * from employees';
l_c pls_integer;
l_col_cnt pls_integer;
l_desc_t dbms_sql.desc_tab;
begin
l_c := dbms_sql.open_cursor;
dbms_sql.parse(c=>l_c, statement=>l_statement, language_flag=>dbms_sql.native);
dbms_sql.describe_columns(c=>l_c, col_cnt=>l_col_cnt, desc_t=>l_desc_t);
for i in 1..l_col_cnt loop
dbms_output.put_line(l_desc_t(i).col_name);
end loop;
dbms_sql.close_cursor(l_c);
exception
when others then
if (dbms_sql.is_open(l_c)) then
dbms_sql.close_cursor(l_c);
end if;
raise;
end;
/
które wyjścia:
EMPLOYEE_ID
FIRST_NAME
LAST_NAME
EMAIL
PHONE_NUMBER
HIRE_DATE
JOB_ID
SALARY
COMMISSION_PCT
MANAGER_ID
DEPARTMENT_ID
PL/SQL procedure successfully completed.
Możesz wykonać dowolną walidację nazw kolumn wewnątrz pętli.
Pamiętaj, że zobaczysz (i zweryfikujesz) tylko nazwy kolumn lub aliasy wyrażeń kolumn, które niekoniecznie będą odzwierciedlać faktycznie pobierane dane. Ktoś może stworzyć zapytanie, które pobiera dowolne dane z dowolnego miejsca, do którego ma dostęp, ale następnie podaje aliasy kolumn/wyrażeń, które są uważane za prawidłowe.
Jeśli próbujesz ograniczyć dostęp do określonych danych, spójrz na inne mechanizmy, takie jak widoki, wirtualna prywatna baza danych itp.