有300个views,select vv.* 
from all_views vv有个field是text(long 类型)是view的sql语句。怎么才可以找出哪些view引用了table_a ??

解决方案 »

  1.   

    最弱的办法 把你的view 搞到文档里面 然后批量查找
      

  2.   

    这…………
    如果你会pb,在pb里顶多10行代码搞定。
      

  3.   

    declare
    l_string varchar2(4000);
    begin
    for tp in (select VIEW_NAME,text from dba_views) loop
    l_string := substr(tp.text,1,4000);
    if instr(l_string,'table_a')>0 then 
    dbms_output.put_line(tp.view_name);
    end if;
    end loop;
    end;
    /
      

  4.   

    long类型的怎么输出来啊?
    执行dbms_output.put_line会出错啊!
    能不能把long转换成varchar2?
      

  5.   

    varchar2才4000,long是2g,转换可以但是会丢失信息
    至少以下试图的长度是大于4000的
    ALL_DEPENDENCIES
    ALL_IND_PARTITIONS
    ALL_LOBS
    ALL_LOB_PARTITIONS
    ALL_OBJECTS
    ALL_QUEUE_TABLES
    ALL_QUEUE_TABLES
    ALL_TABLES
    ALL_TAB_COLS
    ALL_TAB_PARTITIONS
    ALL_TRIGGER_COLS
    ALL_USTATS
    DBA_MVIEWS
    DBA_OBJ_AUDIT_OPTS
    DBA_QUEUE_TABLES
    DBA_TAB_COLS
    DBA_TRIGGER_COLS
    DBA_VARRAYS
    INDEX_STATS
    KU$_QUEUE_TABLE_VIEW
    ORA_KGLR7_DEPENDENCIES
    REPCAT_REPCOLUMN_BASE
    STRADDLING_RS_OBJECTS
    STRADDLING_TS_OBJECTS
    USER_OBJ_AUDIT_OPTS
    USER_QUEUE_TABLES
    USER_TAB_COLS
    USER_TRIGGER_COLS
    USER_VARRAYS
    ALL$OLAP_ENTITY_DESC_USES
    DBA$OLAP2UDIM_LEVEL_ATTR_MAPS
      

  6.   

    还是读出文件在serch,
    谢谢各位拉!
      

  7.   

    CREATE OR REPLACE PROCEDURE find
    IS
       tmp      LONG;
       v_name   VARCHAR2 (4000);   CURSOR c1
       IS
          SELECT text, view_name
            FROM all_views
           WHERE view_name LIKE 'MTL%';
           
    BEGIN
       OPEN c1;
       LOOP
          FETCH c1   
           INTO tmp, v_name;
          EXIT WHEN c1%NOTFOUND;      IF INSTR (tmp, 'MTL_CUSTOMER_ITEMS') > 0 and instr(tmp, 'CUSTOMER_ITEM_NUMBER') > 0
          THEN      
             DBMS_OUTPUT.put_line (v_name);
          END IF;
       END LOOP;
       
       CLOSE c1;   COMMIT;
    END;
    /这是查找所有以MTL开始的view,然后确定其有没reference 这个‘CUSTOMER_ITEM_NUMBER’。这个procedure用在有attribute要更改位置或修改类型时,用来查找相关联的view,如果是table则用
    SELECT text, name
            FROM all_objects
           WHERE object_type = 'TABLE' and object_name LIKE 'MTL%'; 就可以了。