我有近 800 個 SQL 腳本,范圍從中等到復雜的 SQL。資料庫是甲骨文。
我需要每個腳本中使用的表串列。每個腳本都包含許多 with 子句、連接和子查詢。有沒有更簡單的方法來實作這一點?
謝謝 LN
uj5u.com熱心網友回復:
首先將所有查詢存盤到 1 個表 -scripts- 與列 - script_name, script_text 然后這可以作業:
select script_name, script_text, object_name
from scripts s
join dba_objects do
on 1 = 1
where 1 = 1
and instr(upper(s.script_text), upper(do.object_name)) > 0
uj5u.com熱心網友回復:
您可以嘗試explain plan每個陳述句,然后檢查plan_table. 但它:
- 不計算視圖(計劃表顯示視圖的基表)和標量函式
- 應該適用于 dblinks
- 應使用本地 PL/SQL 宣告 (
with function) 和其他模式中的函式進行徹底測驗 - 有查詢重寫和基線的影響
下面是一個例子:
begin for i in 1..10 loop execute immediate 'create table t' || i || '( id int)'; end loop; end; /
create view v_test as select * from t5 join t6 using(id)
create function f_tab return sys.odcinumberlist pipelined as begin null; end; /
explain plan for select * from t1, t2, t3, t4, /*View*/ v_test, /*Pipelined function*/ table(f_tab())
select object_owner, object_name, object_type from plan_table where (object_owner, object_name) in ( select f.owner, f.object_name from all_objects f where f.object_type in ( 'TABLE' , 'VIEW' ) ) or (object_name, object_type) in ( select f.object_name, 'PROCEDURE' from user_objects f where f.object_type in ( 'FUNCTION' , 'PROCEDURE' ) ) order by 1物件所有者 | 物件名 | OBJECT_TYPE :---------------------------- | :------------ | :---------- FIDDLE_TQYMTNVUFUWHRWJEENKX | T1 | 桌子 FIDDLE_TQYMTNVUFUWHRWJEENKX | T2 | 桌子 FIDDLE_TQYMTNVUFUWHRWJEENKX | T3 | 桌子 FIDDLE_TQYMTNVUFUWHRWJEENKX | T4 | 桌子 FIDDLE_TQYMTNVUFUWHRWJEENKX | T5 | 桌子 FIDDLE_TQYMTNVUFUWHRWJEENKX | T6 | 桌子 空 | F_TAB | 程式
db<>在這里擺弄
無論如何,我認為這種任務應該以任何方式而不是任何字串操作來處理 SQL 決議器,因為只有決議器才能確切知道使用了哪些物件
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/406509.html
標籤:
