日期:2014-05-17  浏览次数:20806 次

oracle存储过程的问题 急!!
这个存储过程,目的是从数据库中查找某个表相关的触发器和存储过程
但是执行的时候,只能执行出第一段找出触发器,第二段存储过程那段没有执行,没有报错
这是咋个问题?

create or replace procedure relation(tname varchar2) is
begin

FOR I IN (SELECT * FROM sys.dba_triggers) LOOP
     IF INSTR(I.TRIGGER_BODY, LOWER(tname)) > 0 OR INSTR (I.TRIGGER_BODY, UPPER(tname)) > 0 THEN
     INSERT INTO TABLE_RELATED VALUES (UPPER(tname),I.TRIGGER_NAME,1,'');
     END IF;
     DELETE FROM TABLE_RELATED A WHERE A.ROWID > (SELECT MIN(B.ROWID) FROM  TABLE_RELATED B WHERE A.TABLE_NAME = B.TABLE_NAME AND A.RELATED_NAME = B.RELATED_NAME AND A.RELATED_TYPE = 1 ); 
     COMMIT;
END LOOP;

FOR K IN (SELECT * FROM sys.all_source  WHERE sys.all_source.type = 'PROCEDURE' AND sys.all_source.owner NOT LIKE ('%SYS%')) LOOP
    IF INSTR(K.TEXT, LOWER(tname)) > 0 OR INSTR(K.TEXT,UPPER(tname)) > 0 THEN
       INSERT INTO TABLE_RELATED VALUES (UPPER(tname),K.NAME,3,'');       
    END IF;
    DELETE FROM TABLE_RELATED A WHERE A.ROWID > (SELECT MIN(B.ROWID) FROM  TABLE_RELATED B WHERE A.TABLE_NAME = B.TABLE_NAME AND A.RELATED_NAME = B.RELATED_NAME AND A.RELATED_TYPE = 3 ); 
    COMMIT;
END LOOP;

end;


------解决方案--------------------
引用:
Quote: 引用:

直接查这个视图就可以了DBA_DEPENDENCIES,没必要写存储

这个里面没有显示哪个存储过程对应的表啊

有表啊,除非你用了动态SQL,一般肯定会显示的
select * from DBA_DEPENDENCIES where REFERENCED_NAME='...'