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

Oracle - dapatkan nama tabel dari teks sql

Daripada mencoba menulis parser Anda sendiri, Anda dapat membiarkan Oracle menguraikannya untuk Anda melalui explain plan , lalu lihat tabel rencana untuk melihat objek mana yang dirujuk:

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                   

Seperti yang disarankan @Aleksej, jika pengoptimal hanya menggunakan indeks (sehingga rencana eksekusi menunjukkan akses/pemindaian indeks tanpa mengenai tabel, karena semua kolom yang relevan ada dalam indeks) maka tabel rencana hanya melaporkan indeks. Anda dapat mengizinkannya dengan bergabung ke tampilan indeks; jika itu menyentuh meja juga, itu hanya akan melaporkannya untuk keduanya:

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');

Anda juga perlu memastikan tabel rencana kosong sebelum masing-masing menjelaskan panggilan rencana dan kueri untuk menghindari kebingungan, atau menyetel ID pernyataan sehingga Anda dapat mengidentifikasi tabel mana yang terkait dengan kueri saat ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan jumlah catatan UNIK KESELURUHAN per nilai

  2. oracledb merantai panggilan sql menggunakan janji

  3. Cara Memisahkan String di Oracle

  4. Bagaimana cara menampilkan catatan dengan nilai tertinggi di Oracle?

  5. Oracle SQL:Mengekstrak minggu dalam setahun dari tanggal memberikan hasil acak