oracle中
1.如何查找用到了某个表的存储过程名
2.如何根据存储过程名,查找此存储过程用到了哪些表(不是直接去读存储过程)?有什么语句么?谢谢。
最好还能知道存储过程用到表时,是insert,select,或者是update?

解决方案 »

  1.   

    有现成的pl/sql developer工具,很好用
    在左边的objects对象树型浏览窗口中,找到相关对象
    展开,再展开references(引用那些对象),referenced by(被那些对象引用)
    一目了然。当然,你也可以从user_dependencies、dba_dependencies字典中查询--查询引用
    SELECT t.referenced_owner, t.referenced_name, t.referenced_type
      FROM dba_dependencies t
     WHERE t.name = upper('&OBJECT_NAME');--查找被引用
    SELECT t.name,T.type,t.referenced_owner, t.referenced_name, t.referenced_type
      FROM dba_dependencies t
     WHERE T.referenced_name = upper('&OBJECT_NAME'); 
      

  2.   

    tangreng哥说的对,pl/sql developer是个好东西。我学存储过程就是用那工具。
      

  3.   

    Select * From all_source a Where a.type = upper('Procedure') And
    a.text Like '%表名%';
    1.如何查找用到了某个表的存储过程名
      

  4.   

    不读sp,能知道在sp中对表做了insert,update,还是select操作么 ?谢谢
      

  5.   

    SELECT * FROM dba_source t WHERE t.owner='' AND UPPER(t.text) LIKE'%表名%' ;
    这样有个缺点,就是insert和update等操作有可能和表名不在一行,会遗漏。
    你可以显示全部内容来避免这个问题
    SELECT * FROM dba_source WHERE (owner,NAME,TYPE) IN (SELECT owner,NAME,TYPE FROM dba_source t WHERE t.owner='' AND UPPER(t.text) LIKE'%表名%' );
      

  6.   

    select * from all_source
    where text like '%表名%'
      

  7.   

    半路接手,有很多sp,没任何文档。
    想从整理上看下各个table和sp的关系。。谢谢。