我在Oracle中得到了這三個巨型模式,我稱它們爲db層(L3,L2,L1)。 在每個圖層中,我都有很多可能會從其底層調用某些過程的SP。現在爲了文檔的目的,我需要繪製一些東西像樹,以顯示這些連鎖調用。那麼我不想介入手動提取這些數據的苦差事。在oracle中查找SP鏈調用
問題是,有沒有一種自動的方式來做到這一點?就像查詢誰來呼叫誰一樣。
我在Oracle中得到了這三個巨型模式,我稱它們爲db層(L3,L2,L1)。 在每個圖層中,我都有很多可能會從其底層調用某些過程的SP。現在爲了文檔的目的,我需要繪製一些東西像樹,以顯示這些連鎖調用。那麼我不想介入手動提取這些數據的苦差事。在oracle中查找SP鏈調用
問題是,有沒有一種自動的方式來做到這一點?就像查詢誰來呼叫誰一樣。
我只是擺弄周圍一點點。所以也許就像一個起點。
用您的模式替換DBA_OBJECTS.OWNER IN('HUSQVIK')。
WITH leafs AS (
SELECT
DBA_OBJECTS.OWNER, DBA_OBJECTS.OBJECT_NAME NAME,
CASE WHEN COUNT(PARENT_REFERENCES.REFERENCED_NAME) > 0 THEN 1 ELSE 0 END IS_REFERENCED,
CASE WHEN COUNT(CHILD_REFERENCES.NAME) > 0 THEN 1 ELSE 0 END HAS_REFERENCES
FROM
DBA_OBJECTS
LEFT JOIN DBA_DEPENDENCIES PARENT_REFERENCES ON DBA_OBJECTS.OWNER = PARENT_REFERENCES.REFERENCED_OWNER AND DBA_OBJECTS.OBJECT_NAME = PARENT_REFERENCES.REFERENCED_NAME
LEFT JOIN DBA_DEPENDENCIES CHILD_REFERENCES ON DBA_OBJECTS.OWNER = CHILD_REFERENCES.OWNER AND DBA_OBJECTS.OBJECT_NAME = CHILD_REFERENCES.NAME
WHERE
OBJECT_TYPE IN ('PACKAGE BODY', 'FUNCTION', 'PROCEDURE')
AND DBA_OBJECTS.OWNER IN ('HUSQVIK')
GROUP BY
DBA_OBJECTS.OWNER, DBA_OBJECTS.OBJECT_NAME
)
SELECT 'Entry point -> ' || OWNER || '.' || NAME DEPENDENCY_PATH, 1 MAX_STACK_DEPTH FROM leafs WHERE leafs.IS_REFERENCED = 0 AND leafs.HAS_REFERENCES = 0
UNION ALL
SELECT
DEPENDENCY_PATH, STACK_DEPTH
FROM (
SELECT
'Entry point -> ' ||
CONNECT_BY_ROOT DBA_DEPENDENCIES.OWNER || '.' || CONNECT_BY_ROOT DBA_DEPENDENCIES.NAME ||
SYS_CONNECT_BY_PATH(DBA_DEPENDENCIES.REFERENCED_OWNER || '.' || DBA_DEPENDENCIES.REFERENCED_NAME, ' -> ') DEPENDENCY_PATH,
CONNECT_BY_ISLEAF ISLEAF,
LEVEL + 1 STACK_DEPTH
FROM
DBA_DEPENDENCIES
LEFT JOIN
(SELECT * FROM leafs WHERE leafs.IS_REFERENCED = 0) roots
ON roots.OWNER = DBA_DEPENDENCIES.OWNER AND roots.NAME = DBA_DEPENDENCIES.NAME
WHERE
DBA_DEPENDENCIES.REFERENCED_TYPE IN ('PACKAGE BODY', 'FUNCTION', 'PROCEDURE')
START WITH
roots.NAME IS NOT NULL
CONNECT BY NOCYCLE
PRIOR DBA_DEPENDENCIES.REFERENCED_OWNER = DBA_DEPENDENCIES.OWNER AND
PRIOR DBA_DEPENDENCIES.REFERENCED_NAME = DBA_DEPENDENCIES.NAME)
WHERE ISLEAF = 1
獲取所有依賴您的架構的這個查詢:
SELECT * FROM all_dependencies其中所有者= 'your_schema_name'
出口查詢的結果JSON(或任何其他格式)。
您可以查詢從字典你的程序的依賴關係,但我不認爲你可以生成僅基於Oracle數據庫順序調用圖。你可能會依賴於第三方解決方案,我相信這裏有PL/SQL代碼分析工具。 –
如果您可以提取元數據,那麼您可能會發現它非常複雜,並且每次修改代碼庫時都會發生更改。我建議使用GraphViz來自動繪製依賴關係,所以你需要的只是讓SQL生成適當的文件格式,或者只是包含關係的部分。我已經爲DBMS_Scheduler鏈,任務和程序成功完成了這個任務。您也可以擴展該方法以包含視圖和表格。 –