从all_objects取出object_name,object_type
判断一下如是view,执行alter view object_name compile
如是procedure则alter procedure object_name compile
其他类似

解决方案 »

  1.   

    SET PAGESIZE 1000
    SET LINESIZE 100
    SET HEADING OFF
    SPOOL ALT_ALLINVALID.SQL
    SELECT 'SPOOL ALT_ALLINVALID_RESULT.LST' FROM DUAL;
    SELECT 'ALTER VIEW '||OBJECT_NAME||' COMPILE;' FROM USER_OBJECTS WHERE OBJECT_TYPE='VIEW' AND STATUS='INVALID';
    SELECT 'ALTER TRIGGER '||OBJECT_NAME||' COMPILE;' FROM USER_OBJECTS WHERE OBJECT_TYPE='TRIGGER' AND STATUS='INVALID';
    SELECT 'ALTER PROCEDURE '||OBJECT_NAME||' COMPILE;' FROM USER_OBJECTS WHERE OBJECT_TYPE='PROCEDURE' AND STATUS='INVALID';
    SELECT 'SPOOL OFF' FROM DUAL;
    SPOOL OFF
    @ALT_ALLINVALID.SQL
    EXIT;
      

  2.   

    recompile.SQL
    文件如下:
    SET PAGESIZE 1000
    SET LINESIZE 100
    SET HEADING OFF
    SPOOL ALT_ALLINVALID.SQL
    SELECT 'SPOOL ALT_ALLINVALID_RESULT.LST' FROM DUAL;
    SELECT 'ALTER VIEW '||OBJECT_NAME||' COMPILE;' FROM USER_OBJECTS WHERE OBJECT_TYPE='VIEW' AND STATUS='INVALID';
    SELECT 'ALTER TRIGGER '||OBJECT_NAME||' COMPILE;' FROM USER_OBJECTS WHERE OBJECT_TYPE='TRIGGER' AND STATUS='INVALID';
    SELECT 'ALTER PROCEDURE '||OBJECT_NAME||' COMPILE;' FROM USER_OBJECTS WHERE OBJECT_TYPE='PROCEDURE' AND STATUS='INVALID';
    SELECT 'SPOOL OFF' FROM DUAL;
    SPOOL OFF
    @ALT_ALLINVALID.SQL
    EXIT;
    scall.bat
    SQLPLUS scott/tigger@DB_SUN @recompile.SQL
      

  3.   

    当表结构变了以后,所有依附在该表上的对象都会被Oracle标记为无效,
    等下一次再被调用时, Oracle会自动重新编译那些对象.
    但是,如果表结构变化很大的话,那么必须重新修改依附在上面上的对象,
    然后在编译.
    因为字段名都没有了,不管怎么都会报错的.
      

  4.   

    主要存储过程、视图中使用SELECT A.* FROM A需要重新编译
      

  5.   

    TO dacong(大聪) scall.bat??
      

  6.   

    根據的你具體情況,利用SQL產生SQL的辦法得到你要更改的sql命令.