Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana menemukan kolom yang digunakan dalam kueri dinamis tanpa menjalankan seluruh kueri

Anda tidak perlu menjalankan kueri untuk mendapatkan nama kolom, Anda hanya perlu menguraikannya; misalnya sebagai contoh sederhana:

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;
/

yang menghasilkan:

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.

Anda dapat melakukan validasi apa pun yang Anda perlukan pada nama kolom di dalam loop.

Ingatlah bahwa Anda hanya akan melihat (dan memvalidasi) nama kolom atau alias untuk ekspresi kolom, yang belum tentu mencerminkan data yang sebenarnya sedang diambil. Seseorang dapat membuat kueri yang menarik data apa pun dari mana pun yang diizinkan untuk diakses, tetapi kemudian memberikan alias kolom/ekspresi yang dianggap valid.

Jika Anda mencoba membatasi akses ke data tertentu, lihat mekanisme lain seperti tampilan, basis data pribadi virtual, dll.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pdo_oci_handle_factory:Kesalahan saat mencoba mengambil teks untuk kesalahan ORA-01804

  2. Oracle - Tidak dapat menggunakan tanda * dengan kolom lain di klausa pilih

  3. Tindakan Dinamis menyegarkan semua laporan di halaman

  4. ASP.NET - ORA-04068:status paket yang ada telah dibuang

  5. Mengonversi kueri oracle ke kueri MySQL