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

Oracle - lấy tên bảng từ văn bản sql

Thay vì cố gắng viết trình phân tích cú pháp của riêng bạn, bạn có thể để Oracle phân tích cú pháp cho bạn thông qua explain plan và sau đó nhìn vào bảng kế hoạch để xem nó đề cập đến những đối tượng nào:

declare
  text varchar2(4000) := 'SELECT PT.PT_PARTY_NAME VALUE,PT.PT_PARTY_NAME LABEL
    FROM DWH_OWNER.DWH_ACCOUNTS ACC,
         DWH_OWNER.DWH_PARTIES PT
   WHERE ACC.ACC_SOURCE_ID = :P_DOMVAL_REF1
    AND ACC.ACC_PT_KEY = PT.PT_KEY';
begin
  execute immediate 'explain plan for ' || text;
end;
/

select distinct object_owner, object_name
from plan_table
where object_type = 'TABLE';

OBJECT_OWNER                   OBJECT_NAME                  
------------------------------ ------------------------------
DWH_OWNER                      DWH_ACCOUNTS                  
DWH_OWNER                      DWH_PARTIES                   

Như @Aleksej đã đề xuất, nếu trình tối ưu hóa chỉ sử dụng một chỉ mục (do đó, kế hoạch thực thi hiển thị truy cập / quét chỉ mục mà không nhấn vào bảng, vì tất cả các cột có liên quan đều nằm trong chỉ mục) thì bảng kế hoạch chỉ báo cáo chỉ mục. Bạn có thể cho phép điều đó bằng cách tham gia vào chế độ xem chỉ mục; nếu nó cũng chạm vào bảng, nó sẽ chỉ báo cáo nó cho cả hai:

select distinct case when pt.object_type = 'INDEX' then ai.table_owner
    else pt.object_owner end as owner,
  case when pt.object_type = 'INDEX' then ai.table_name
    else pt.object_name end as table_name
from plan_table pt
left join all_indexes ai on ai.owner = pt.object_owner
and ai.index_name = pt.object_name
where pt.object_type in ('TABLE', 'INDEX');

Bạn cũng cần đảm bảo rằng bảng kế hoạch trống trước mỗi cuộc gọi và truy vấn giải thích kế hoạch để tránh nhầm lẫn hoặc đặt ID câu lệnh để bạn có thể xác định bảng nào liên quan đến truy vấn hiện tại.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-02298 Không tìm thấy khóa chính?

  2. SQL:Phân tích cú pháp chuỗi được phân tách bằng dấu phẩy và sử dụng làm phép nối

  3. oracle Chọn ngày cho các mặt hàng được bán cách nhau 1 phút

  4. Truy vấn để tính cả SUM tích lũy và tổng số tiền lương

  5. Dấu ngoặc kép trong Bí danh cột Oracle