Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tìm cột được sử dụng trong truy vấn động mà không cần thực hiện toàn bộ truy vấn

Bạn không cần thực hiện truy vấn để lấy tên cột, bạn chỉ cần phân tích cú pháp nó; ví dụ. như một ví dụ đơn giản:

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

đầu ra nào:

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.

Bạn có thể thực hiện bất kỳ xác thực nào bạn cần đối với các tên cột bên trong vòng lặp.

Hãy nhớ rằng bạn sẽ chỉ thấy (và xác thực) tên cột hoặc bí danh cho các biểu thức cột, điều này sẽ không nhất thiết phản ánh dữ liệu thực sự đang được truy xuất. Ai đó có thể tạo ra một truy vấn lấy bất kỳ dữ liệu nào từ bất kỳ nơi nào mà nó có quyền truy cập, nhưng sau đó cung cấp cho các cột / bí danh biểu thức được coi là hợp lệ.

Nếu bạn đang cố gắng hạn chế quyền truy cập vào dữ liệu cụ thể, hãy xem xét các cơ chế khác như chế độ xem, cơ sở dữ liệu riêng ảo, v.v.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách lưu trữ các giá trị BigInteger trong cơ sở dữ liệu oracle

  2. làm thế nào để thay đổi ngày thành giờ trong oracle 10g

  3. Ngắt các khoảng thời gian bằng nhau vào cuối tháng

  4. Chuyển đổi ngày thành chuỗi trong Oracle

  5. Truy vấn con Oracle không thấy biến từ khối ngoài 2 cấp trở lên