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

Oracle — pobierz nazwę tabeli z tekstu sql

Zamiast próbować pisać własny parser, możesz pozwolić Oracle przeanalizować go za Ciebie za pomocą explain plan , a następnie spójrz na tabelę planu, aby zobaczyć, do których obiektów się odnosi:

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                   

Jak zasugerował @Aleksej, jeśli optymalizator używa tylko indeksu (więc plan wykonania pokazuje dostęp/skanowanie do indeksu bez uderzania w tabelę, ponieważ wszystkie odpowiednie kolumny są w indeksie), to tabela planu raportuje tylko indeks. Możesz na to zezwolić, dołączając do widoku indeksu; jeśli trafi również na stół, zgłosi to po prostu dla obu:

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

Należy również upewnić się, że tabela planu jest pusta przed każdym wywołaniem planu wyjaśniania i zapytaniem, aby uniknąć nieporozumień, lub ustawić identyfikator instrukcji, aby można było zidentyfikować tabele powiązane z bieżącym zapytaniem.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdowanie liczby znaków i cyfr w ciągu

  2. Jak naprawić błąd brakującego wyrażenia ORA 00936?

  3. Urządzenie do odzyskiwania danych bez utraty danych

  4. Sformatuj dane tabeli SQL jako tabelę tekstową

  5. ORA-00918:kolumna niejednoznacznie zdefiniowana, otrzymuję ten błąd