Chcete-li získat názvy sloupců, nemusíte dotaz provádět, stačí jej analyzovat; např. jako jednoduchý příklad:
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;
/
jehož výstupy:
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.
U názvů sloupců uvnitř smyčky můžete provést jakékoli ověření, které potřebujete.
Mějte na paměti, že uvidíte (a ověříte) pouze názvy sloupců nebo aliasy pro výrazy sloupců, které nemusí nutně odrážet data, která jsou skutečně načítána. Někdo by mohl vytvořit dotaz, který stáhne jakákoli data odkudkoli, kde má oprávnění k přístupu, ale pak poskytne aliasy sloupců/výrazů, které jsou považovány za platné.
Pokud se snažíte omezit přístup ke konkrétním datům, podívejte se na další mechanismy, jako jsou pohledy, virtuální soukromá databáze atd.