如何在PLSQL中找到数据是从哪里插入到表中的?

问题描述 投票:0回答:1

我使用此代码来搜索表所在的所有包、触发器、函数等...

SET SERVEROUTPUT ON; DECLARE v_table_name VARCHAR2(100) := 'DATREDPUB'; BEGIN FOR dep IN (SELECT NAME, TYPE, REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE REFERENCED_NAME = v_table_name AND REFERENCED_TYPE = 'TABLE') LOOP DBMS_OUTPUT.PUT_LINE( dep.NAME); END LOOP; END; /
因此,我得到了所有包、触发器、函数等的列表...其中还有表中的选择或注释中的条目。然后搜索例如一桌200包很乏味。

有什么方法可以找出仅执行插入或插入表的此类包、触发器、函数等?

我已经尝试过,但没有成功。

SET SERVEROUTPUT ON; DECLARE v_table_name VARCHAR2(100) := 'DATREDPUB'; BEGIN FOR dep IN (SELECT NAME, TYPE, REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE REFERENCED_NAME = v_table_name AND REFERENCED_TYPE = 'TABLE') LOOP IF dep.TYPE = 'PACKAGE' THEN DBMS_OUTPUT.PUT_LINE('Objekt: ' || dep.NAME || ', Typ: ' || dep.REFERENCED_TYPE || ', Op: PROCEDURE'); ELSIF dep.TYPE = 'TRIGGER' THEN IF dep.NAME LIKE 'BI_%' THEN DBMS_OUTPUT.PUT_LINE('Objekt: ' || dep.NAME || ', Typ: ' || dep.REFERENCED_TYPE || ', Op: INSERT'); ELSIF dep.NAME LIKE 'BU_%' THEN DBMS_OUTPUT.PUT_LINE('Objekt: ' || dep.NAME || ', Typ: ' || dep.REFERENCED_TYPE || ', Op: UPDATE'); ELSIF dep.NAME LIKE 'BD_%' THEN DBMS_OUTPUT.PUT_LINE('Objekt: ' || dep.NAME || ', Typ: ' || dep.REFERENCED_TYPE || ', Op: DELETE'); ELSE DBMS_OUTPUT.PUT_LINE('Objekt: ' || dep.NAME || ', Typ: ' || dep.REFERENCED_TYPE || ', Op: UNKNOWN'); END IF; END IF; END LOOP; END; /
    
sql oracle plsql
1个回答
0
投票
尝试如下:

SELECT ud.NAME, ud.TYPE, ud.REFERENCED_TYPE, src.LINE, src.TEXT FROM USER_DEPENDENCIES ud INNER JOIN dba_source src ON(src.NAME = ud.NAME) WHERE ud.REFERENCED_NAME = 'LOG_TABLE' And ud.REFERENCED_TYPE = 'TABLE' And Upper(src.TEXT) Like Upper('%INSERT%LOG_TABLE%') Escape '\'
/*     R e s u l t :
NAME    TYPE          REFERENCED_TYPE LINE  TEXT
------  ------------  --------------- ----  ---------------------------------------
LOGGER  PACKAGE BODY  TABLE             61  "           INSERT INTO LOG_TABLE "      */
...如果您无权访问 dba_source,请使用 all_source。 all_source 将包含当前用户可以访问的存储对象

© www.soinside.com 2019 - 2024. All rights reserved.