Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak znaleźć kolumnę używaną w zapytaniu dynamicznym bez wykonywania całego zapytania?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Connection String dla środowiska RAC?

  2. Wyszukiwanie w polu varchar wartości liczbowych z określonego zakresu

  3. Konfiguracja wielu baz danych dla wersji Spring Data JPA 2.0.9

  4. Jak wstawić wiele rekordów do bazy danych Oracle za pomocą Node.js

  5. Dowiedz się, do którego kwartału należy data w Oracle